所以.我有一个问题,我在一台机器上有两个版本的GCC.
3.4.6和4.1
这是由于新软件的一些依赖性问题.(需要glibc 4.1)
当我将这个新软件与4.1库链接时,它链接得很好.但是,当涉及到执行软件时,它无法找到库,因为它在我的LD_LIBRARY_PATH中查看3.4.6.如果我将LD_LIBRARY_PATH设置为4.1 lib,它会破坏shell,同时杀死其他东西,因为3.4.6库用于此目的.
它有点像22.
有没有办法在链接时我可以在不使用LD_LIBRARY_PATH的情况下给出该共享库的绝对路径?
这样我希望有两个版本,但只使用4.1这个特定的应用程序?
你的意思是一个绝对路径,它在程序启动时使用,在寻找库时更受青睐?rpath
就是这样.它将覆盖LD_LIBRARY_PATH中设置的默认搜索路径和内容.告诉gcc将其传递给链接器:
g++ -Wl,-rpath,/usr/lib/my_4.1 -omy_binary *.cpp
您可以让它向您显示搜索处理(用于help
为您提供更多选项):
[js@HOST2 cpp]$ LD_DEBUG=libs ./a.out 5859: find library=libc.so.6 [0]; searching 5859: search path=/usr/lib/my_4.1/tls/i686/sse2:/usr/lib/my_4.1/tls/i686: /usr/lib/my_4.1/tls/sse2:/usr/lib/my_4.1/tls: /usr/lib/my_4.1/i686/sse2:/usr/lib/my_4.1/i686: /usr/lib/my_4.1/sse2:/usr/lib/my_4.1 (RPATH from file ./a.out) 5859: trying file=/usr/lib/my_4.1/tls/i686/sse2/libc.so.6 5859: .... 5859: search cache=/etc/ld.so.cache 5859: trying file=/lib/libc.so.6 (note: found here!) 5859: