簡體   English   中英

在os x上的matlab mex文件中嵌入python

[英]embed python in matlab mex file on os x

我正在嘗試將Python嵌入到OS X上的MATLAB mex函數中。我已經看到了可以這樣做的引用(例如這里 )但我找不到任何OS X特定信息。 到目前為止,我可以成功構建一個嵌入式Python(所以我的鏈接器標志必須正常),我也可以毫無困難地使用默認選項構建示例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

但是當我嘗試構建一個嵌入Python的mex文件時,我遇到了一個未定義符號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設置(我添加了-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(蘋果)]

我想我找到了答案 - 包括神秘的蘋果鏈接器標志:

-undefined dynamic_lookup -bundle

我能夠把它建成它似乎工作正常。 如果有人在OS X上有任何關於這些標志或庫處理的引用,我會非常感興趣。 現在我看到它們我記得曾經被同樣的事情所困擾 - 但我無法找到任何關於它們實際做什么以及為什么/何時應該需要的文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM