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