我已经阅读gdb says "cannot open shared object file"和gdb can not open shared object file并按照说明操作。GDB“无法打开共享对象文件”问题
我有一个链接到共享库文件(/zzz/yyy/xxx.so
)的二进制文件。在将LD_LIBRARY_PATH
设置为/zzz/yyy/
并运行没有GDB的二进制文件后,它执行得非常好。
然而,当我试图用GDB调试此二进制,GDB说:
error while loading shared libraries: xxx.so: cannot open shared object file: No such file or directory
我已经(在.gdbinit集):
(gdb)show env LD_LIBRARY_PATH
LD_LIBRARY_PATH = "/zzz/yyy/"
和
(gdb) show solib-search-path
The search path for loading non-absolute shared library symbol files is "/zzz/yyy/".
,并在我的系统:
% printenv LD_LIBRARY_PATH
/zzz/yyy
什么是为什么GDB仍然无法找到此共享库中的其他可能的原因是什么?
在这些情况下,它是有用的'strace'。尝试运行'strace -o out.txt gdb。/ myprogram',然后,在发生错误后退出调试器并执行'grep xxx.so out.txt'来查看gdb在哪里查找库。 – rodrigo
@rodrigo:谢谢。我意识到这是因为我在〜/ .cshrc中有一个额外的LD_LIBRARY_PATH目录。在该目录中有一个x64版本库文件(我的应用程序是为x86构建的)。 x64版本文件使GDB抱怨。顺便说一下,strace在这种情况下似乎并不奏效,但并没有显示GDB曾试图访问x64库(但GDB应该这样做)。 – stanleyli
也许gdb分叉。 'strace'默认只跟踪一个进程。你也可以使用'strace -f'来跟踪子进程,看看会发生什么。 – rodrigo