J'essaie d'intégrer Python dans une fonction MATLAB mex sur OS X. J'ai vu des références que cela peut être fait (par exemple here) mais je ne trouve aucun système d'exploitation X informations spécifiques. Jusqu'à présent, je peux construire avec succès un Python embarqué (donc mes drapeaux éditeur de liens doit être OK) et je peux aussi construire des exemples de fichiers Mex sans aucun problème et avec les options par défaut:intégrer python dans matlab fichier mex sur os 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
Mais lorsque je tente de construire une MEX fichier qui embarque Python Je rencontre un problème avec le symbole principal non défini. Voici ma fonction 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();
}
Voici les étapes de compilation 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
J'ai essayé de jouer avec les paramètres arc (j'ai ajouté -arch i386 pour essayer de garder tout 32bit - J'utilise le python.org 32 bit 2.5 build), et l'ordre des drapeaux de l'éditeur de liens, mais je n'ai pas réussi à aller n'importe où. Je ne trouve pas beaucoup en ligne non plus. Est-ce que quelqu'un a des idées sur la façon dont je peux construire ça?
[EDIT: devrait probablement ajouter que je suis sur OS X 10.6.1 avec MATLAB 7.8 (r2009a), Python 2.5.4 (python.org) - J'ai essayé à la fois gcc-4.0 et gcc-4.2 (apple)]
Voir 'man ld'. Les offres groupées sont expliquées ici: http://developer.apple.com/mac/library/documentation/CoreFoundation/Conceptual/CFBundles/Introduction/Introduction.html –