静态链接到动态库.glibc的

Ale*_*lex 4 linker gcc glibc g++

所以.我有一个问题,我在一台机器上有两个版本的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这个特定的应用程序?

Joh*_*itb 7

你的意思是一个绝对路径,它在程序启动时使用,在寻找库时更受青睐?rpath就是这样.它将覆盖LD_LIBRARY_PATH中设置的默认搜索路径和内容.告诉gcc将其传递给链接器:

g++ -Wl,-rpath,/usr/lib/my_4.1 -omy_binary *.cpp
Run Code Online (Sandbox Code Playgroud)

您可以让它向您显示搜索处理(用于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:
Run Code Online (Sandbox Code Playgroud)