2013-03-06 105 views
0

我正在調用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文件

任何幫助表示讚賞和感謝提前。

回答

1

我認爲答案是錯誤消息,

Do you need "set solib-search-path" or "set sysroot"? 

也許藏在你家.gdbinit適當的設置,看看您是否能幫助GDB找到符號表。

0

正如我所看到的,您正在使用QSP.so的相對路徑。

嘗試將目錄更改爲QSP.so所在的路徑。

例如QSP.so是在/home/user/project/QSP.so

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