2012-07-19 3 views
0

matlab 엔진을 사용하는 예제 engdemo.cpp을 컴파일하고 실행하도록 Eclipse를 구성하려고합니다. matlab에 엔진을 사용하는 C++ 프로그램 이클립스를 컴파일

나는 here 작성 지침에 따라,하지만, 난 여전히 오류가 : 나는 이러한 명령을 사용하는 쉘에서 프로그램을 컴파일, 나는 오류가없는 경우

make all 
Building target: matlabEngine 
Invoking: GCC C++ Linker 
g++ -L/usr/local/MATLAB/R2011a/bin/glnx86 -Xlinker -rpath-link -Xlinker /usr/local/MATLAB/R2011a/bin/glnx86 -o"matlabEngine" ./engdemo.o -leng -lm -lmat -lmex -lut 
/usr/bin/ld: ./engdemo.o: undefined reference to symbol 'mxDestroyArray' 
/usr/bin/ld: note: 'mxDestroyArray' is defined in DSO /usr/local/MATLAB/R2011a/bin/glnx86/libmx.so so try adding it to the linker command line 
/usr/local/MATLAB/R2011a/bin/glnx86/libmx.so: could not read symbols: Invalid operation 
collect2: ld returned 1 exit status 
make: *** [matlabEngine] Errore 1 

그래서 그것을 실행할 수 있습니다.

g++ -c -I/usr/local/MATLAB/R2011a/extern/include -I/usr/local/MATLAB/R2011a/simulink/include -DMATLAB_MEX_FILE -ansi -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/local/MATLAB/R2011a/extern/include/cpp -I/usr/local/MATLAB/R2011a/extern/include -DGLNX86 -DGCC -DMX_COMPAT_32 -O -DNDEBUG "engdemo.cpp" 
g++ -O -o "engdemo" engdemo.o -Wl,-rpath-link,/usr/local/MATLAB/R2011a/bin/glnx86 -L/usr/local/MATLAB/R2011a/bin/glnx86 -leng -lmx -lm 

하지만 이클립스에서 컴파일해야합니다. 도움이 되었습니까?

+0

libmx가 Eclipse 명령 행에서 누락 된 것 같습니다. 해당 라이브러리를 추가 했습니까? – Rolle

+0

@Rolle, 링커가 .so의 이름과 라이브러리의 경로를 어떻게 알고 있다고 생각합니까? – stanri

답변

0

일반적으로 링커 오류는 디버깅하기에 상당히 불쾌 할 수 있습니다. 이 경우 오류는 매우 유익합니다.

undefined reference to symbol 'mxDestroyArray'mxDestroyArray라는 기호를 포함하는 라이브러리에 링크되어 있지 않음을 나타냅니다. 그러나,이 라이브러리가 libmx.so라고 당신이 어디 있는지 알고 있도록 /usr/local/MATLAB/R2011a/bin/glnx86에서 찾을 수 있음을 말해 주는가.

g++ -O ... 명령에는이 라이브러리의 경로 (... -L/usr/local/MATLAB/R2011a/bin/glnx86 ...)가 포함되어 있으며,이 라이브러리가 작동하는 이유를 설명합니다.

g++ -O ... 명령의 -lmx에 표시된 -l 플래그를 사용하여 링커 명령에서 라이브러리 자체를 참조해야합니다.

Eclipse에서 동일한 작업을 수행해야합니다.

Eclipse에서는 Project 메뉴를 선택하고 Properties으로 이동하여 프로젝트 경로와 기호를 찾을 수 있습니다. C/C++ General을 확장하고 Paths and Symbols을 선택하십시오. 이 대화 상자에서는 g ++의 -L 매개 변수와 비슷한 링커에 필요한 라이브러리의 위치를 ​​Eclipse에 알릴 수 있습니다.

이렇게하려면 라이브러리 이름과 경로를 Library PathsLibraries 탭 아래 목록에 추가하십시오.

참고 : 경로를 추가하면 또한 라이브러리 이름을 지정해야 충분하지 않다 (++는 -l 매개 변수는이 경우의 g에, -lmx)를 Libraries 탭에서

라는 새로운 라이브러리를 추가 mx. 이것은 일식 링커 명령에 -lmx을 추가해야합니다.

+0

예, 이미 완료했습니다. 이클립스 콘솔에서 실제로 사용하는 명령은 올바른 경로를 보여줍니다 : g ++ -L/usr/local/MATLAB/R2011a/bin/glnx86 -Xlinker -rpath-link -Xlinker/usr/local/MATLAB/R2011a/bin/glnx86 -o "matlabEngine"./engdemo.o -leng -lm -lmat -lmex -lut – user1537705

+0

예, 라이브러리 경로를 포함했지만 실제 라이브러리 ('-lmx'로 식별 됨)는 포함하지 않았습니다. Eclipse 빌드 명령에 없습니다. 이 답변을 더 자세히 설명하는 메모를 추가했습니다. – stanri

+0

고마워! 이제 코드가 컴파일되고 링크됩니다. 하지만 그것을 실행하려고하면 matlab에 : 명령을 찾을 수 없습니다. matlab 명령이 내 검색 경로에 있습니다. 내 쉘에서 호출 할 수 있습니다. 이클립스 콘솔에서 내 명령을 찾을 수 없다. 어떻게 설정해야합니까? 도와 주셔서 감사합니다 – user1537705

관련 문제