静态链接C ++库失败

时间:2014-02-22 10:41:10

标签: c gcc c++11 g++

我有兴趣在我的基于c的程序中包含C ++语言。我有两个系统(主机和目标),目标系统是有限的,特别是在内存中。因此,在我的主机中,我必须静态链接目标端程序所需的一些库。但是,在我的makefile中,我一直在操作gcc补丁(在编译和链接步骤中使用各种gcc标志)。

在使用C ++语言之前一切正常; 例如,通过在.cpp文件中包含iostream头文件,目标系统上存在一个错误,显示:“无法解析符号'wctob'”

我必须在下面指出我的makefile:

in the compiling step: 

$(CXX) -O0 -I<Headers dir> $(LIBSC) -Wno-write-strings -Wno-narrowing -Wno-return-type -Wno-abi -Wno-unused-variable -DNDEBUG  -Wa, -c -fmessage-length=0 -I<Headers dir>  -march=4kec -EL -o "$@" "$<"


in the linking step: 

$(CXX) -lpthread -Wl,-Map,output.map $(MyFlags) $(LIBS) $(STRIP) -muclibc -march=4kec -EL -o 
"output.elf" $(OBJS) $(LIBS) $(MyFlags) -Wl,-rpath -Wl,<LIBDIR> -L<LIBDIR>

------一些定义

MyFlags = -lc -static-libstdc++ -static-libgcc;(在链接步骤中使用的这些标志)

LIBDIR = is the address of needed libraries

LIBSC = -nostdinc++;(编译步骤中使用的这些标志)

Headers dir =是程序员包含的c和c ++头文件所需的地址。

LIBS and OBJS也是所需库和对象的列表。

另外,我将LIBDIR添加到ld.so.conf和LD_LIBRARY_PATH,但问题并没有解决。 (我的g ++版本是4.7.3。)

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

您必须告诉C ++编译器使用C命名和符号。所以:

extern "C" {

// your cpp codes

}