LD_PRELOAD更改LD_LIBRARY_PATH

时间:2011-07-08 18:24:01

标签: linux environment-variables ld rpath

我有一个特殊的问题。我有一个使用gcc-4.2构建的共享库'my_tracker.so'。此共享库现在依赖于libgcc_s.so.1(GCC 4.2)。我做了'ldd my_tracker.so'并从/ lib64中获取了libgcc_s.so.1。

我正在运行

'LD_PRELOAD=my_tracker.so LD_LIBRARY_PATH=[vnc_install]/lib/vnclibs:$LD_LIBRARY_PATH vncserver'

在我的脚本中。我想确保vncserver从[vnc_install]/lib/vnclibs/获取其libgcc_so.1(GCC 3.2.3),因此将其放在LD_LIBRARY_PATH前面。

然而,在执行我的脚本之后,看起来vncserver正在从/lib64获取libgcc_s.so.1(GCC 4.2)。

加载我预加载的共享库'my_tracker.so'是否在LD_LIBRARY_PATH前面找到了libgcc_s.so.1(GCC 4.2)?

如果是,我该如何解决这个问题?

此致 约翰

1 个答案:

答案 0 :(得分:0)

解决方法是获取patchelf并使用它来修补二进制文件和任何复制的库,以使用RPATH。然后你可以完全忽略LD_LIBRARY_PATH。如果你需要一个不同的ld-linux.so来加载你的二进制文件,patchelf可以修复二进制文件来找到它。