无法加载共享库符号,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

  1. cd /home/user/project/
  2. gdb <app>