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

时间:2009-05-31 16:27:40

标签: c++ linux emacs 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 / Programming / main / src / mainx   / mnt / sda5 / Programming / main / src / mainx:加载共享库时出错:libmisc.so:无法打开共享对象文件:没有这样的文件或目录

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

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

答案 2 :(得分:5)

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

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

如果您需要经常使用LD_LIBRARY_PATH进行调试(并且不想记住每次都从shell运行emacs),这很方便。