gdb说“无法打开共享对象文件”

我有一个二进制和一个共享库。 共享库编译为:

all: g++ -g -shared -fpic $(SOURCES) -o libmisc.so 

该二进制文件编译为:

 LIBS=-L../../misc/src LDFLAGS=-lmisc all: g++ -g -o mainx $(INCLUDE) $(SOURCE) $(LIBS) $(LDFLAGS) 

我在~/.bashrc设置

 export LD_LIBRARY_PATH=/mnt/sda5/Programming/misc/src/ 

libmisc.so输出path。

从控制台debugging工作正常:

 gdb mainx 

但是从Emacs22启动gdb失败,并显示以下消息:

启动程序:/ mnt / sda5 / Programming / main / src / mainx / mnt / sda5 / Programming / main / src / mainx:加载共享库时出错:libmisc.so:无法打开共享目标文件:没有这样的文件或目录

这一刻看起来非常棘手,我解决不了。 我不知道这是一个emacs的问题,或者我应该在gdb的命令行中传递一个参数。

Solutions Collecting From Web of "gdb说“无法打开共享对象文件”"

在调用gdb之前,Emacs可能不会读取你的.bashrc文件。 尝试将“设置solib搜索路径”和“设置solib绝对路径在您的.gdbinit文件,而不是

Emacs不会通过bash调用gdb,而是直接调用gdb,因此.bashrc更改不会生效, LD_LIBRARY_PATH也不会设置。

如果你退出emacs,打开一个新的shell(所以设置LD_LIBRARY_PATH ),在其中启动emacs,然后做MX gdb ,那么它会工作。

在GDB中设置solib-search-path是一个破解。

更好的解决方法是以不需要LD_LIBRARY_PATH的方式构建可执行文件:

 LDFLAGS=-lmisc -Wl,-rpath=/mnt/sda5/Programming/misc/src 

另一种方法是在$HOME创建.gdbinit文件,并在其中设置LD_LIBRARY_PATH:

 # file .gdbinit set env LD_LIBRARY_PATH=/mnt/sda5/Programming/misc/src/ 

如果你需要频繁地使用LD_LIBRARY_PATH进行调试(并且不想记住每次从shell运行emacs),那么这很方便。