MATLAB: fichier dll et c Mex dans Win7 64 bits (Matlab 2010b)

J’ai juste échoué à mex le fichier dll et c correctement. J’ai passé des jours dans l’inverstigation d’un très débutant à « mex ». Le professionnel miscrosoft visual 2010 a été utilisé et le fichier a été téléchargé sur http://nislab.ee.duke.edu/NISLab/Platelets_%28with_software%29.html. Je viens de suivre les instructions et d’exécuter « compile.m » où il n’y a que deux lignes: « mex -output plateletApprox.dll plateletApprox.c C: \ Progra ~ 1 \ MATLAB71 \ extern \ lib \ win32 \ lcc \ libmwlapack.lib
mex plateletApprox.c C: \ Progra ~ 1 \ MATLAB71 \ extern \ lib \ win32 \ lcc \ libmwlapack.lib « . Mais une erreur se produit toujours. Y a-t-il quelqu’un qui peut bien vouloir m’aider pour ce problème. fichier et exécutez le fichier compile.m. Aucune connaissance spécifiée n’est nécessaire. Merci beaucoup!

Meilleure réponse

  • Comme Walter l’a déjà souligné, les versions de MATLAB à R2006b avaient les routines BLAS et LAPACK dans une bibliothèque, le fichier libmwlapack.lib. Les versions de MATLAB R2007a et plus tard les ont divisées en deux bibliothèques distinctes, libmwblas.lib et libmwlapack.lib. Les routines qui vous manquent dans votre lien, dgels et dgemv, sont des routines BLAS. Vous devez inclure le fichier libmwblas.lib dans votre commande mex (en plus de conserver le libmwlapack.lib pour les routines LAPACK que vous utilisez le cas échéant).
    Pour l’erreur d’identification non déclarée M_PI, ajoutez simplement ceci en haut du fichier de code source plateletApprox.c:
     
    #ifndef M_PI
    # define M_PI 3.141592653589793238
    #endif
     
    Après avoir fait ces deux choses, vous pourrez probablement compiler et exécuter le code … et planter très rapidement MATLAB dans le processus. J’ai parcouru le code source et il y a eu une hypothèse codée en dur dans le code que les types entiers dans les interfaces de bibliothèque BLAS et LAPACK sont des int 32 bits. Pour votre plate-forme 64 bits, cependant, ce n’est probablement pas vrai … ce sont probablement des entiers 64 bits (size_t). Cela entraînera le crash de MATLAB. Le code source devra être nettoyé de toutes les définitions int pour le contenu de l’interface BLAS et remplacé par mwSignedIndex à la place. Si vous ne connaissez pas suffisamment C pour le faire, vous devez demander de l’aide à quelqu’un (soit sur le site Web qui contient le code source, soit ici dans ce forum). La chose simple à essayer serait de remplacer chaque instance de « int » par « mwSignedIndex » à l’exception des arguments dans mexFunction lui-même. C’est-à-dire, laissez la ligne suivante tranquille:
     

    void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])