如何让 GCC 使用不同的标准库?
Posted
技术标签:
【中文标题】如何让 GCC 使用不同的标准库?【英文标题】:How can I ask GCC to use a different standard library? 【发布时间】:2020-10-16 07:04:06 【问题描述】:我在/usr/lib/debug/usr/lib/x86_64-linux-gnu/
中有一个调试版本的libstdc++
6。
我想告诉 gcc/g++ 使用这个库而不是没有调试符号的标准库版本。
我尝试使用-nostdlib
并使用-L
显式传递库路径,但出现链接错误,例如
/usr/bin/ld: CMakeFiles/tst_elfmap.dir/perfparser/tests/auto/elfmap/tst_elfmap.cpp.o: undefined reference to symbol '__gxx_personality_v0@@CXXABI_1.3'
//usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding symbols: DSO missing from command line
似乎库版本(根据文件名)对于我系统上安装的 libstdc++ 的调试和发布版本是相同的:
lrwxrwxrwx 1 root 19 Oct 4 2019 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 -> libstdc++.so.6.0.21
【问题讨论】:
你试过export LD_LIBRARY_PATH=/usr/lib/debug/usr/lib/x86_64-linux-gnu/
吗?
@NutCracker 似乎可以解决问题!
GCC 是开源的。你可以改进它的源代码,你应该阅读关于Invoking GCC 的文档。如果您使用cmake(另请参阅GNU make 或ninja...),您应该阅读文档
【参考方案1】:
您应该使用LD_LIBRARY_PATH
环境变量,例如:
export LD_LIBRARY_PATH=/usr/lib/debug/usr/lib/x86_64-linux-gnu/
此变量可用于更改动态链接器搜索路径,因此,libstdc++
将沿着 LD_LIBRARY_PATH
搜索,而不是在系统的库路径中搜索 libstdc++
。
【讨论】:
以上是关于如何让 GCC 使用不同的标准库?的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 中将 VS2005 静态库与 gcc 链接