Я пытаюсь встроить Python в mex-функцию MATLAB на OS X. Я видел ссылки, что это можно сделать (например, здесь ), но я не могу найти какую-либо специфическую информацию для 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
Но когда я пытаюсь создать mex-файл, который встраивает Python, я сталкиваюсь с проблемой с неопределенным символом 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 i386, чтобы попытаться сохранить все 32-битным - я использую 32-битную сборку python.org 32), и порядок флагов компоновщика, но пока не смог добраться куда угодно. Не могу найти много онлайн либо. У кого-нибудь есть идеи о том, как я могу заставить это построить?
[РЕДАКТИРОВАТЬ: вероятно, следует добавить, что я нахожусь на OS X 10.6.1 с MATLAB 7.8 (r2009a), Python 2.5.4 (python.org) - я пробовал и gcc-4.0 и gcc-4.2 (apple) ]