错误:ld.so:object' /opt/xyz/mylib.so'来自LD_PRELOAD无法预加载:忽略

时间:2016-03-01 02:55:54

标签: c++ ld-preload

将软件从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二进制文件的源代码版本并重新编译它是必不可少的。但是要做到这一点,我认为现在看看为什么它真的失败可能会有用。

0 个答案:

没有答案