链接'libstdc ++'库在嵌入式linux中被破坏了

时间:2014-01-14 11:45:54

标签: c++ c cross-compiling

我一直致力于一个项目,该项目将被加载到嵌入式系统上,没有足够的内存/磁盘空间来安装C ++编译器并本地编译代码。

因此,我需要“交叉编译”我的开发(主机)机器上的代码,以便在目标机器(嵌入式Linux)上使用。

发生问题与使用字符串和iostream有关,这是C ++标准模板库(STL)的一个特性。但是,由于内存在嵌入式系统中非常重要,因此标准模板库(libstdc ++)无法在目标端提供。

我需要在主机上统计链接标准库,而不是在目标端动态链接。因此,在我的Makefile中,我需要在编译和链接步骤中进行稍微复杂的修改才能构建我的项目。

我在链接步骤中使用了一些参数,如-nodefaultlibs,-static-libstdc ++和-lstdc ++,并在编译器标志中添加了-nostdinc ++。但是,目标方面存在问题; “无法加载库libstdc ++。so.6”

我尝试过的大部分设置都无效。有没有解决方案?

1 个答案:

答案 0 :(得分:1)

-lstdc++覆盖-static-libstdc++,尝试仅使用-static-libstdc++进行关联。

见例如:

$ g++ -o foo foo.cpp -static-libstdc++ -lstdc++
$ ldd foo
    linux-gate.so.1 =>  (0x0056b000)
    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0x007ae000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x005dd000)
    /lib/ld-linux.so.2 (0x002bc000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0x0095e000)

libstdc ++是动态链接的!

$ g++ -o foo foo.cpp -static-libstdc++
$ ldd foo
    linux-gate.so.1 =>  (0x0097b000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0x001f9000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x0037f000)
    /lib/ld-linux.so.2 (0x00199000)

现在不是。