2013-12-22 3 views
1

mexfunction에서 부스트를 사용하려고합니다. 아래부스트로 mexfunction을 컴파일하는 중 링커 오류가 발생했습니다.

내 코드

MAIN.CPP

#include <mex.h> 
#include <boost/thread.hpp> 
#include <boost/date_time.hpp> 

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) 

{ 
    mexPrintf("test boost"); 

} 

내가 그런 다음 아래 명령

mex main.cpp -LC:\Boost\1.55.0\VC\10.0\x64\stage\lib -IC:\Boost\1.55.0\VC\10.0\x64 

를 사용하여 컴파일이다 내가이 연결 오류를 얻을

LINK : fatal error LNK1104: cannot open file 'libboost_thread-vc100-mt-1_55.lib' 

C:\PROGRA~1\MATLAB\R2012A\BIN\MEX.PL: Error: Link of 'main.mexw64' failed. 
그럼 난 사용하여 다시 컴파일

,

mex main.cpp -LC:\Boost\1.55.0\VC\10.0\x64\stage\lib -IC:\Boost\1.55.0\VC\10.0\x64 -llibboost_thread-vc100-mt-s-1_55 

는하지만 여전히 저도 같은 오류가 발생합니다. 이 문제를 어떻게 해결할 수 있습니까?

편집 : 나는 어떤 문제없이 정상 비주얼 스튜디오 C++ 프로젝트에 부스트를 사용할 수 있습니다

. 이 문제는 내가 mexfunction에 넣을 때만 나온다.

+0

mex 실행중인 링커 명령은 무엇입니까? 아마도 그것은 그것을 인쇄하는 자세한 플래그가 있습니다. –

+0

나는 이것이 당신이 요구하는 것이라고 생각한다. 명령은 입니다. errCode = runCmdInShell (cmdtool, cmdargs); 여기서 "cmdtool = "C : ₩ Program Files ₩ MATLAB ₩ R2012a ₩ sys ₩ perl ₩ win32 ₩ bin ₩ perl.exe "C : ₩ Program Files ₩ MATLAB ₩ R2012a ₩ bin ₩ mex.pl" " 및"cmdargs = -called_from_matlab -matlab "C : ₩ Program Files ₩ MATLAB ₩ R2012a"main.cpp -LC : ₩ Boost ₩ 1.55.0 ₩ VC ₩ 10.0 ₩ x64 ₩ stage ₩ lib -IC : ₩ Boost ₩ 1.55.0 ₩ VC \ 10.0 \ x64 -lboost_thread-vc100-mt-1_55 " 이고 반환 된 errorCode는 2입니다. – Optimus

답변

1

나는이 질문이 꽤 오래되었다는 것을 알고 있지만 mex와 비슷한 문제가 있었고 라이브러리 디렉토리 검색 경로뿐만 아니라 또한 컴파일 된 라이브러리 객체의 이름.

mex main.cpp -I<path/to/lib> -L<path/to/lib/objects> -l<object_name> 

옵션 -l가 MEX 얘기하는 데 사용되는 명령 줄 지정된 개체 라이브러리를 링크 :이 들어

나는 다음과 같은 명령을 사용했다. 그런 다음 Mex은 -l에 추가 된 내용을 찾으려고 시도하고 Windows의 경우 .lib, UNIX의 경우 .LIBEXT를 추가합니다. 여기

실제 경로와 예 :

mex main.cpp -IC:\boost_1_54_0 -LC:\boost_1_54_0\release -lthread 

그리고 마지막으로 귀하의 경우에는 내가 노력 제안 :

mex main.cpp -IC:\Boost\1.55.0\VC\10.0\x64 -LC:\Boost\1.55.0\VC\10.0\x64\stage\lib -lthread 

편집 : 나는 눈치

BOOST_ALL_NO_LIB을 정의하는 것도 도움이 왜냐하면이 정의를 제거하면 오류가 다시 발생하기 때문입니다. 심볼 이름을 정의하려면 명령 행 옵션 -D을 사용할 수 있습니다. 그냥 추가하십시오 -DBOOST_ALL_NO_LIB

관련 문제