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