我有一个二进制文件和一个共享库.共享库编译为:
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 /编程/ main/src/mainx/mnt/sda5 /编程/ main/src/mainx:加载共享库时出错:libmisc.so:无法打开共享对象文件:没有这样的文件或目录
这一刻看起来很棘手,我无法解决它.我不确定这是否是emacs的问题,或者我应该在gdb的命令行中传递一个参数.
Emacs不会通过bash调用gdb,而是直接调用它,因此.bashrc更改不会生效LD_LIBRARY_PATH
且未设置.
如果你退出emacs,打开一个新的shell(如此LD_LIBRARY_PATH
设置),在其中启动emacs,然后执行M-X gdb
,然后它就可以了.
solib-search-path
在GDB中设置是一个黑客.
更好的解决方法是以不需要LD_LIBRARY_PATH
开头的方式构建可执行文件:
LDFLAGS=-lmisc -Wl,-rpath=/mnt/sda5/Programming/misc/src
在调用gdb之前,Emacs可能不会读取.bashrc.尝试将'set solib-search-path'和'set solib-absolute-path设置为.gdbinit文件
另一种方法是.gdbinit
在你的文件中创建一个文件$HOME
并在那里设置LD_LIBRARY_PATH:
# file .gdbinit set env LD_LIBRARY_PATH=/mnt/sda5/Programming/misc/src/
如果您需要经常使用LD_LIBRARY_PATH进行调试(并且不想记住每次都从shell运行emacs),这很方便.