标签:mex python-embedding matlab python macos
我试图将Python嵌入OS X上的MATLAB mex函数中.我已经看到可以做到这一点的参考(例如here),但是我找不到任何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符号问题.这是我的混合函数:
#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来尝试使所有内容保持32bit-我正在使用python.org 32 bit 2.5构建),以及链接器标志的顺序,但是还无法去任何地方.在网上也找不到太多.有人对我如何构建它有任何想法吗?
[编辑:可能应该添加我在带有MATLAB 7.8(r2009a),Python 2.5.4(python.org)的OS X 10.6.1上-我已经尝试了gcc-4.0和gcc-4.2(苹果)]
解决方法:
我想我找到了答案-通过添加神秘的苹果链接器标志:
-undefined dynamic_lookup -bundle
我能够建立它,而且看起来工作正常.如果有人对OS X上的这些标志或库处理有任何参考,我将非常感兴趣.现在我看到他们,我记得过去曾经被同样的事情所困扰-但是我找不到任何有关它们实际工作以及为什么/何时需要它们的文档.
标签:mex,python-embedding,matlab,python,macos 来源: https://codeday.me/bug/20191107/2002414.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。