如何使用正确的libstdc?

我刚刚编译了 trunk version of gcc 但是当使用g编译一个c项目时,我发现应该存在的标准库组件,如 std::conjunction ,都缺失了 . 当我检查我的本地存储库( gcc_trunk/libstdc++-v3/include/std )中的代码时,似乎一切都在那里 . 我如何确保使用 libstdc++ 的正确版本?

下面是我用来检查系统各自输出的一些命令

$ readelf -d / usr / lib64 / libstdc .so.6 | grep soname

0x000000000000000e (SONAME)             Library soname: [libstdc++.so.6]

$ ls -l / usr / lib / libstdc .so.6

lrwxrwxrwx 1 root root 19 Jan 7 13:19 /usr/lib/libstdc++.so.6 -> libstdc++.so.6.0.23

有什么想法吗?

回答(1)

2 years ago

我假设您已经将新GCC安装到某个非标准位置(即不在 /usr 下),因此在运行时,您的应用会尝试使用不兼容的主机 /usr/lib/libstdc++.so . 要解决这个问题,你可以做任何一个

  • 运行您的应用程序,并将 LD_LIBRARY_PATH 设置为指向新的GCC库文件夹

  • 将您的应用与-Wl,-rpath相关联

  • 通过 -static-libstdc++libstdc++ 静态链接(这是部分解决方案,因为其他编译器库,例如 libgcc.so 仍将来自主机GCC)