2009-11-09 2 views
3

OS X에서 MATLAB mex 함수에 파이썬을 삽입하려고합니다.이 작업을 수행 할 수있는 참조를 보았습니다 (예 : here). 그러나 어떤 OS도 찾을 수 없습니다. X 특정 정보. 지금까지 성공적으로 임베디드 파이썬을 구축 할 수 있습니다 (그래서 내 링커 플래그는 확인을해야합니다)와 나는 또한 어떤 문제없이 기본 옵션으로 예 MEX 파일을 만들 수 있습니다 :OS X에서 matlab mex 파일에 파이썬 포함하기

jm-g26b101:mex robince$ cat pytestnomex.c 
#include <Python/Python.h> 

int main() { 
    Py_Initialize(); 
    PyRun_SimpleString("print 'hello'"); 
    Py_Finalize(); 
    return 0; 
} 
jm-g26b101:mex robince$ gcc -arch i386 pytestnomex.c -I/Library/Frameworks/Python.framework/Versions/2.5/include/python2.5 -L/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/config -ldl -lpython2.5 
jm-g26b101:mex robince$ ./a.out 
hello 

그러나 나는 MEX를 빌드 할 때 파이썬을 포함하는 파일 정의되지 않은 기호 main에 문제가 발생했습니다. 여기

#include <Python.h> 
#include <mex.h> 

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray*prhs[]) 
{ 
    mexPrintf("hello1\n"); 
    Py_Initialize(); 
    PyRun_SimpleString("print 'hello from python'"); 
    Py_Finalize(); 
} 

가 MEX 컴파일 단계는 다음과 같습니다 : 여기 내 MEX 기능입니다

jm-g26b101:mex robince$ gcc -c -I/Applications/MATLAB_R2009a.app/extern/include -I/Applications/MATLAB_R2009a.app/simulink/include -DMATLAB_MEX_FILE -arch i386 -I/Library/Frameworks/Python.framework/Versions/2.5/include/python2.5 -DMX_COMPAT_32 -O2 -DNDEBUG "pytest.c" 
jm-g26b101:mex robince$ gcc -O -arch i386 -L/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/config -ldl -lpython2.5 -o "pytest.mexmaci" pytest.o -L/Applications/MATLAB_R2009a.app/bin/maci -lmx -lmex -lmat -lstdc++ 
Undefined symbols: 
    "_main", referenced from: 
     start in crt1.10.6.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

내가 아치 설정 (나는 그것을 시도하고 모든 32 비트를 유지하기 위해 -arch i386을 추가로 장난 해봤 - 나는 python.org 32 비트 2.5 빌드를 사용하고 있습니다.), 그리고 링커 플래그의 순서는 어디서나 얻을 수 없었습니다. 온라인도 많이 찾을 수 없습니다. 누구든지 내가 어떻게 이것을 만들 수있는 아이디어가 있습니까?

[편집 : 아마도 나는 MATLAB 7.8 (r2009a), Python 2.5.4 (python.org)로 OS X 10.6.1을 추가해야합니다 - gcc-4.0과 gcc-4.2 (apple)]

답변

4

나는 답을 찾은 것 같아 - 신비의 사과 링커 플래그를 포함하여 :

-undefined dynamic_lookup -bundle 

내가 그것을 내장하고 확인을 작동하는 것 같다 얻을 수있었습니다. 누구나 OS X에서 일반적으로 이러한 플래그 나 라이브러리 처리에 대한 언급이 있으면 매우 흥미로울 것입니다. 이제는 과거에 똑같은 물체에 물린 것을 기억합니다. 그러나 실제로 필요한 작업과 필요한 작업에 대한 문서는 찾을 수 없습니다.

+1

'man ld'을 참조하십시오. 번들에 대한 설명은 http://developer.apple.com/mac/library/documentation/CoreFoundation/Conceptual/CFBundles/Introduction/Introduction.html에서 확인할 수 있습니다. –