我读了很多指南说LD_LIBRARY_PATH
首先要搜索 the ,但我的一个 .so 库正在与libtdc++.so.6
in链接/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/lib
到LD_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>