【问题标题】:Statically linking C++ libraries is failed静态链接 C++ 库失败
【发布时间】:2014-03-24 01:41:09
【问题描述】:

我有兴趣在基于 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 也是所需库和对象的列表。

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

谁能帮帮我?

【问题讨论】:

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


    【解决方案1】:

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

    extern "C" {
    
    // your cpp codes
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-26
      • 2020-11-27
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多