我一直致力于一个项目,该项目将被加载到嵌入式系统上,没有足够的内存/磁盘空间来安装C ++编译器并本地编译代码。
因此,我需要“交叉编译”我的开发(主机)机器上的代码,以便在目标机器(嵌入式Linux)上使用。
发生问题与使用字符串和iostream有关,这是C ++标准模板库(STL)的一个特性。但是,由于内存在嵌入式系统中非常重要,因此标准模板库(libstdc ++)无法在目标端提供。
我需要在主机上统计链接标准库,而不是在目标端动态链接。因此,在我的Makefile中,我需要在编译和链接步骤中进行稍微复杂的修改才能构建我的项目。
我在链接步骤中使用了一些参数,如-nodefaultlibs,-static-libstdc ++和-lstdc ++,并在编译器标志中添加了-nostdinc ++。但是,目标方面存在问题; “无法加载库libstdc ++。so.6”
我尝试过的大部分设置都无效。有没有解决方案?
答案 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)
现在不是。