C++ 广发银行说:";无法打开共享对象文件";

C++ 广发银行说:";无法打开共享对象文件";,c++,linux,emacs,gdb,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) 二进制文件是通过以下方式编译的: all: g++ -g -shared -fpic $(SOURCES) -o libmisc.so

我有一个二进制文件和一个共享库。 共享库由以下内容编译:

all:
g++ -g -shared -fpic $(SOURCES) -o libmisc.so
LIBS=-L../../misc/src

LDFLAGS=-lmisc

all:
g++ -g -o mainx $(INCLUDE) $(SOURCE) $(LIBS) $(LDFLAGS)
二进制文件是通过以下方式编译的:

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

emacs在调用gdb之前可能没有读取您的.bashrc。尝试将“设置solib搜索路径”和“设置solib绝对路径”放在.gdbinit文件中,而不是

Emacs不通过bash调用gdb,而是直接调用它,因此,bashrc更改不会生效,并且未设置
LD_LIBRARY_路径

如果退出emacs,打开一个新的shell(因此设置了
LD\u LIBRARY\u PATH
),在其中启动emacs,然后执行
M-X gdb
,那么它就会工作

在GDB中设置
solib搜索路径
,是一种黑客行为

一个更好的修复方法是以这样一种方式构建可执行文件,即它不需要
LD\u LIBRARY\u PATH
来开始:

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

另一种方法是在
$HOME
中创建
.gdbinit
文件,并在其中设置LD\u LIBRARY\u路径:

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

如果您需要经常使用LD_LIBRARY_路径进行调试(并且不想每次都从shell运行emacs),这非常方便。

非常感谢您的回答。它工作得很好。我之前用关键词搜索了gdb手册,以找到一个快速的答案,但我失败了。你救了我一天:)这些天我当然会深入阅读gdb手册。vmihai。并非在所有平台上都可用,-rpath也有问题:它总是一个折衷方案。谢谢你的回答。这听起来也很合理。