gpt4 book ai didi

c++ - 错误 : ld. 所以:无法预加载来自 LD_PRELOAD 的对象 '/opt/xyz/mylib.so':忽略

转载 作者:行者123 更新时间:2023-12-05 05:24:04 25 4
gpt4 key购买 nike

将软件从 32 位升级到 64 位后,预编译的二进制文件开始失败并出现错误:

[root@localhost /root]# LD_PRELOAD=/opt/xyz/lib/mylib.so mycommand /inputfile.txt /outputfile.txt 
ERROR: ld.so: object '/opt/xyz/lib/mylib.so' from LD_PRELOAD cannot be preloaded: ignored.
mycommand: error while loading shared libraries: mylib.so: cannot open shared object file: No such file or directory

mycommand 是位于/usr/bin/mycommand 中的预编译二进制文件。它需要库作为 LD_PRELOAD。

显然我确定文件/opt/xyz/lib/mylib.so 确实存在:

[root@localhost lib]# ls -alh
total 512K
drwxr-xr-x 2 root root 4.0K Mar 1 15:40 .
drwxr-xr-x 10 root root 4.0K Feb 24 10:54 ..
-rwxr-xr-x 1 root root 218K Oct 28 22:41 mylib64.so
lrwxrwxrwx 1 root root 14 Mar 1 15:40 mylib.so -> mylib64.so

除此错误外,是否还有更多我可以提取的调试信息?如果我只是删除 mylib.so 似乎无关紧要,错误保持不变。很难说它是否无法预加载 库或是否无法找到 库。

LD_PRELOAD 工作是否需要任何其他环境变量或库?

在我看来,获取 mycommand 二进制文件的源代码版本并重新编译它是必不可少的。然而,要做到这一点,我认为了解它现在实际上失败的原因可能会很有用。

最佳答案

LD_PRELOAD 不适用于符号链接(symbolic link)。您需要将路径设置为库的实际位置。例如:

LD_PRELOAD=/opt/xyz/lib/mylib64.so

我同意更具体的错误消息会很有用。

关于c++ - 错误 : ld. 所以:无法预加载来自 LD_PRELOAD 的对象 '/opt/xyz/mylib.so':忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35713824/

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