当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《gdb说"无法打开共享对象文件"》经验,为你挑选了3个好方法。

我有一个二进制文件和一个共享库.共享库编译为:

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的命令行中传递一个参数.



1> Employed Rus..:

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


并非在所有平台上都可用,并且当它出现时,-rpath也存在问题:[rpath(链接)](http://en.wikipedia.org/wiki/Rpath_(linkin))这总是一个权衡.

2> yhager..:

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



3> Paul..:

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

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

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

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有