无法加载共享库符号,GDB
问题描述:
我正在调用MATLAB的共享库(QSP.so
)。该库用C编写,并使用mex网关,数据通过共享库。看来我的C代码中有一些错误,因为我有以下问题:无法加载共享库符号,GDB
1)在MATLAB中,当我调用网关函数时,MATLAB大部分时间冻结。 2)当我用GDB调试代码,如所描述Here,并设置在入口函数(QSP
)断点,GDB不会在断点处停止,并创建以下错误:
warning: Could not load shared library symbols for ./QSP.so.
Do you need "set solib-search-path" or "set sysroot"?
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb289db40 (LWP 4234)]
0xb72a7a0e in ??() from /lib/i386-linux-gnu/libc.so.6
我很确定网关没有问题,因为当我不调用共享库时,一切都很好。另一方面,如果没有调试器,就很难找到问题。所以,我想知道如何让GDB在断点处停下来。
此外,以下是我的Makefile:
CC = gcc
CFLAGS = -c -fpic -Wall -Werror -O3 -g
all: QSP.o ExtraRoutines.o
$(CC) -shared -o QSP.so -g $^
QSP.o: QSP.c ExtraRoutines.c QSP.h
$(CC) $(CFLAGS) $^
ExtraRoutines.o: ExtraRoutines.c QSP.h
$(CC) $(CFLAGS) $^
Moving:
mv -f QSP.so ../
Clean:
rm *.o
可以看出,我用-g
标志都.o
和.so
文件
任何帮助表示赞赏和感谢提前。
答
我认为答案是错误消息,
Do you need "set solib-search-path" or "set sysroot"?
也许藏在你家.gdbinit适当的设置,看看您是否能帮助GDB找到符号表。
答
正如我所看到的,您正在使用QSP.so
的相对路径。
尝试将目录更改为QSP.so
所在的路径。
例如QSP.so
是在/home/user/project/QSP.so
:
cd /home/user/project/
gdb <app>