gpt4 book ai didi

c - 有什么方法可以更改链接以避免 HPUX 上的 LD_PRELOAD?

转载 作者:太空宇宙 更新时间:2023-11-03 23:36:42 25 4
gpt4 key购买 nike

我想我明白为什么我需要 LD_PRELOAD set当加载一个多线程应用程序加载一个加载 libcl.2 的单线程库时,但我想知道我是否可以使用一些链接器设置来避免这种情况。任何帮助表示赞赏。

更新:

Perl 加载 动态/usr/lib/libc.2Perl 加载 DB2.sl DB2 尝试加载 动态/usr/lib/libcl.2

会不会是具有该共享对象名称的东西已经加载然后失败。

/usr/lib>pwd

/usr/lib

/usr/lib>ls -lt | grep libcl.2

-r-xr-xr-x 1 bin bin 1261568 Feb 14 2003 libcl.2

lrwxr-xr-x 1 root sys 9 Nov 21 2002 libcl.sl -> ./libcl.2

现在拒绝去寻找同名的东西的原因可能由 chattr 输出解释:

两者都设置了禁用字段,因此它们不会在环境中查找,也不会使用备用名称

perl 上的聊天Perl:

     shared executable
shared library dynamic path search:
SHLIB_PATH disabled second
embedded path disabled first Not Defined
shared library list:
dynamic /usr/lib/libnsl.1
dynamic /usr/lib/libnm.sl
dynamic /usr/lib/libdld.2
dynamic /usr/lib/libm.2
dynamic /usr/lib/libsec.2
dynamic /usr/lib/libpthread.1
dynamic /usr/lib/libc.2

DB2.sl 上的 chatrDB2.sl:

     shared library
shared library dynamic path search:
SHLIB_PATH disabled second
embedded path disabled first Not Defined
shared library list:
dynamic /opt/IBM/db2/V8.1/lib/libdb2.sl
dynamic /usr/lib/libcl.2

是否可以调整其中一个库的 chatr 设置?

更新:为什么不让他们对库使用相同的名称。

最佳答案

根据您的编译器/链接器(想想我十多年前登录的 HPUX 机器让我不寒而栗),--rpath 可能会有所帮助:据我了解,在您的情况下rtld 首先在错误的地方寻找,所以这就是为什么你想预加载其他版本的库,对吧?在这种情况下,rpath 会将一个额外的搜索位置嵌入到已编译的二进制文件中,您可以使用该位置将其指向首选版本所在的目录。

希望这对您有所帮助。 -V

关于c - 有什么方法可以更改链接以避免 HPUX 上的 LD_PRELOAD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/782124/

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