gpt4 book ai didi

gcc - 静态链接到动态库。 glibc

转载 作者:行者123 更新时间:2023-12-04 23:34:30 34 4
gpt4 key购买 nike

所以。我有一个问题,我在一台机器上有两个版本的 GCC。
3.4.6 和 4.1

这是由于新软件的一些依赖性问题。 (需要 glibc 4.1)

当我将这个新软件与 4.1 库链接时,它链接得很好。但是,在执行软件时,它找不到库,因为它在我的 LD_LIBRARY_PATH 中查看 3.4.6。如果我将 LD_LIBRARY_PATH 设置为 4.1 库,它会炸毁 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:

关于gcc - 静态链接到动态库。 glibc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/448265/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com