2013-03-06 2 views
0

MATLAB에서 공유 라이브러리 (QSP.so)를 호출합니다. 라이브러리는 C로 작성되고 mex 게이트웨이를 사용하여 데이터가 공유 라이브러리에 전달됩니다.공유 라이브러리 심볼을로드 할 수 없습니다. GDB

1) MATLAB에서 게이트웨이 함수를 호출하면 MATLAB은 대부분 시간을 고정시킵니다. 오류 다음 2)가 Here 설명 된대로, 코드를 디버깅하고, 입력 기능 (QSP)에서 중단 점을 설정하기 위해 GDB를 사용할 때, 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를 멈출 수있는 방법을 알고 싶습니다.

또한, 다음은 내 메이크입니다 :

이 볼 수있는 바와 같이
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 

, 나는 사전에 모두 .o.so 파일

어떤 도움에 감사드립니다

감사에 대한 -g 플래그를 사용합니다.

답변

1

나는

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

은 어쩌면 당신은 GDB 도움이 심볼 테이블을 찾을 수 있는지 확인하기 위해 홈 .gdbinit에서 적절한 설정을 숨기고, 대답은 오류 메시지에 생각합니다.

0

위에서 볼 수 있듯이 QSP.so의 상대 경로를 사용하고 있습니다.

QSP.so이있는 경로로 디렉토리를 변경해보십시오. 예를 들어 QSP.so

/home/user/project/QSP.so이다 :

  1. cd /home/user/project/
  2. gdb <app>
관련 문제