2009-11-09 77 views
3

我想將Python嵌入到OS X上的MATLAB mex函數中。我已經看到了可以完成的引用(例如here),但是我找不到任何操作系統X具體信息。到目前爲止,我可以成功建立一個嵌入式Python(所以我的連接標誌必須OK),我也可以建立例如MEX文件沒有任何麻煩和使用默認選項:在os上嵌入python mex文件x

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嵌入Python的文件遇到未定義符號main的問題。這裏是我的MEX功能:

#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編譯步驟:

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 

我試着用弓的設置(我加-arch i386的它,試圖把一切都32位玩耍 - 我正在使用python.org 32位2.5版本)和鏈接器標誌的順序,但一直無法獲取。網上找不到太多。有沒有人有任何想法,我可以如何建立這個?編輯:應該可能添加我在OS X 10.6.1與MATLAB 7.8(r2009a),Python 2.5.4(python.org) - 我已經嘗試gcc-4.0和gcc-4.2(蘋果)]

回答

4

我想我找到了答案 - 通過包括神祕的蘋果連接標誌:

-undefined dynamic_lookup -bundle 

我能得到它的建成,它似乎工作確定。如果有人在OS X上有任何有關這些標誌或庫處理的參考資料,我會非常感興趣。現在我看到他們,我記得過去曾被同樣的東西咬過 - 但我無法找到任何文件說明他們實際上做了什麼以及爲什麼/何時需要他們。

+1

請參閱'man ld'。這些解釋在這裏:http://developer.apple.com/mac/library/documentation/CoreFoundation/Conceptual/CFBundles/Introduction/Introduction.html – 2009-11-09 18:48:08