1

QSP.soMATLAB から共有ライブラリ ( ) を呼び出しています。ライブラリは 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

どんな助けでも大歓迎です、そして前もって感謝します。

4

3 に答える 3

3

答えはエラーメッセージにあると思いますが、

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

ホーム .gdbinit に適切な設定を隠して、gdb がシンボル テーブルを見つけられるかどうかを確認してください。

于 2013-03-06T06:06:52.213 に答える