我正在QSP.so
从 MATLAB 调用一个共享库 ( )。该库是用 C 语言编写的,并使用 mex 网关,数据通过共享库传递。我的 C 代码中似乎存在一些错误,因为我有以下问题:
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
任何帮助表示赞赏并提前感谢。