我有一个二进制文件和一个共享库。 共享库使用以下命令编译:
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的命令行中传递一个参数。
答案 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),这很方便。