当前位置:  开发笔记 > 编程语言 > 正文

静态链接到动态库.glibc的

如何解决《静态链接到动态库.glibc的》经验,为你挑选了1个好方法。

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



1> Johannes Sch..:

你的意思是一个绝对路径,它在程序启动时使用,在寻找库时更受青睐?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:

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有