QSP.so
MATLAB から共有ライブラリ ( ) を呼び出しています。ライブラリは C で記述されており、mex ゲートウェイを使用して、データが共有ライブラリに渡されます。次の問題があるため、C コードにバグがあるようです。
1) MATLAB でゲートウェイ関数を呼び出すと、ほとんどの場合 MATLAB がフリーズします。2) GDB を使用してコードをデバッグし、ここで説明したように、エントリ関数 ( 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
どんな助けでも大歓迎です、そして前もって感謝します。