gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:50:21 24 4
gpt4 key购买 nike

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

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

发生的问题与使用字符串和 iostream 相关,它们是 C++ 标准模板库 (STL) 的一项功能。然而,由于内存在嵌入式系统中非常重要,因此标准模板库 (libstdc++) 无法在目标端使用。

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

我在链接步骤中使用了一些参数,例如 -nodefaultlibs、-static-libstdc++ 和 -lstdc++,并且还在编译器标志中添加了 -nostdinc++。尽管如此,目标端仍然存在问题; “无法加载库 libstdc++.so.6”

我尝试过的大部分设置都不起作用。有什么解决办法吗?

最佳答案

-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)

现在不是了。

关于c++ - 链接 'libstdc++' 库在嵌入式 linux 中被破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21112764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com