强制链接器在非标准目录中查找 stdc++ 库

强制链接器在非标准目录中查找 stdc++ 库

我读了很多指南说LD_LIBRARY_PATH首先要搜索 the ,但我的一个 .so 库正在与libtdc++.so.6in链接/usr/lib64

ldd mylib.so:
...
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f82abd18000)
...

我想mylib.so链接到libstdc++.so.6另一个位置,例如/apps/gcc_4.8.0/lib/libstdc++.so.6

所以我添加/apps/gcc_4.8.0/libLD_LIBRARY_PATH, 其中才不是里面有/usr/lib64,但仍然没有找到它。

如果我添加:

setenv LD_PRELOAD /apps/gcc_4.8.0/lib/libstdc++.so.6

对于我的环境,不再有链接器错误。是的,但这并不能解决问题。下游用户不会希望依赖该库位于正确的位置。为什么首先搜索 LD_LIBRARY_PATH!?!

答案1

它应该与编译器开关一起使用Wl,--rpath=/apps/gcc_4.8.0/lib/libstdc++.so.6

更新:如果您还需要新的加载程序,请使用此编译器开关:-Wl,--dynamic-linker=<path-to-the-new-dynamic-linker>

相关内容