Question

Je suis en train d'intégrer Python dans une fonction sur MATLAB® OS MEX X. J'ai vu des références que cela peut être fait (par exemple ) mais je ne peux pas trouver OS X des informations spécifiques. Jusqu'à présent, je peux construire avec succès un Python embarqué (donc mes drapeaux de l'éditeur de liens doit être OK) et je peux aussi construire des exemples de fichiers sans aucun problème Mex et avec les options par défaut:

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 un fichier qui intègre Python MEX je rencontre un problème avec principal symbole 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 de 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

Je l'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 bits 2.5 build) et l'ordre des drapeaux de l'éditeur de liens, mais havre de paix » t été en mesure d'obtenir partout. Vous ne trouvez pas soit beaucoup plus en ligne. Est-ce que quelqu'un a des idées sur la façon dont je peux obtenir ce pour construire?

[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é gcc 4.0 et gcc-4.2 (pomme) ]

Était-ce utile?

La solution

Je pense avoir trouvé la réponse - en incluant les drapeaux mystérieux éditeur de liens de pomme:

-undefined dynamic_lookup -bundle

J'ai pu faire construire et il semble fonctionner OK. Je serais très intéressé si quelqu'un a des références sur ces drapeaux ou la manipulation de la bibliothèque sur OS X en général. Maintenant, je vois que je me souviens avoir été mordu par la même chose dans le passé - mais je ne parviens pas à trouver de la documentation sur ce qu'ils font et pourquoi / quand ils devraient être nécessaires

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top