如何让 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 链接

gcc -nostdlib是否会阻止标准库的显式附加?

为啥某些 LLVM 标准库标头包含其他标头但 GCC 不 [重复]

gcc 链接非标准名称库

Mac OS X 上的 GCC 7 找不到 C++ 标准库

转: gcc 指定运行时动态库路径