gdb说“无法打开共享目标文件”

问题描述:

我有一个二进制文件和一个共享库。 共享库被编译: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输出路径。从控制台

调试工作正常:

gdb mainx 

但是从Emacs22,启动GDB失败,出现以下消息:

启动程序:到/ mnt/SDA5 /编程/主/ src目录/ mainx /mnt/sda5/Programming/main/src/mainx:加载共享库时出错:libmisc.so:无法打开共享目标文件:无此文件或目录

目前看起来非常棘手,我无法解决它。我不确定这是一个emacs的问题,还是我应该在gdb的命令行中传递一个参数。

Emacs在调用gdb之前可能不会读取您的.bashrc。尝试将'set solib-search-path'和'solib-absolute-path设置为您的.gdbinit文件

+0

非常感谢您的回答。 它工作得很好。 我以前用关键词搜索了gdb手册以找到一个快速的答案,但是我失败了。你救了我一天:) 我当然会深入阅读gdb手册。 vmihai。 – grayasm 2009-05-31 18:02:40

Emacs不会通过bash调用gdb,而是直接调用它,所以.bashrc更改会不生效,LD_LIBRARY_PATH未设置。

如果你退出emacs,打开一个新的shell(因此设置了LD_LIBRARY_PATH),启动emacs,然后执行M-X gdb,那么它会工作。

在GDB中设置solib-search-path是个黑客。

一个更好的解决方法是建立可执行以这样一种方式,它不需要LD_LIBRARY_PATH开始与:

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

不适用于所有平台,当它出现时,-rpath也有问题: [rpath(链接)](http://en.wikipedia.org/wiki/Rpath_(链接)) 它始终是交易。 – 2009-05-31 18:51:50

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

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

这是方便,如果你需要经常与LD_LIBRARY_PATH调试(不要想记住在你的shell每次运行的emacs)。