GDB"无法打开共享对象文件"问题

时间:2014-05-01 00:28:00

标签: c++ linux gdb linker-errors dynamic-linking

我已阅读gdb says "cannot open shared object file"gdb can not open shared object file并按照说明操作。

我有一个链接到共享库文件(/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仍无法找到此共享库的其他可能原因是什么?

1 个答案:

答案 0 :(得分:1)

  

但是,当我尝试使用GDB来调试这个二进制文件时,GDB说:加载共享库时出错:xxx.so:无法打开共享对象文件:没有这样的文件或目录

你错了:不是GDB说的,它是动态加载器。 GDB本身并不关心LD_LIBRARY_PATH设置的内容,它只是运行您的程序。但是你的程序无法运行。

最常见的原因:您正在LD_LIBRARY_PATH中重新设置~/.cshrc,而GDB会在单独的shell中运行您的程序,并且该shell会读取您的.cshrc,因此程序在不正确的环境下执行。

修复方法是为非交互式shell设置.cshrc 而不是设置LD_LIBRARY_PATH。参见例如this回答。