FAQ MATLAB
FAQ MATLABConsultez toutes les FAQ
Nombre d'auteurs : 11, nombre de questions : 172, dernière mise à jour : 29 septembre 2022
- Que signifie MEX ?
- Qu'est-ce qu'un fichier MEX ?
- Comment créer un fichier MEX ?
- Comment utiliser un fichier MEX ?
- Un fichier MEX est-il portable ?
- Comment connaitre l'extension des fichiers MEX utilisés par ma version de MATLAB ?
- À quoi correspond la fonction mexFunction dans un fichier MEX ?
- Un compilateur externe est-il nécessaire pour créer un fichier MEX ?
- Comment choisir le compilateur à utiliser pour créer un fichier MEX ?
- Quels sont les différents compilateurs supportés pour compiler un fichier MEX ?
Les fichiers MEX sont des fichiers écrits en C, C++ ou en Fortran, qui une fois compilés, peuvent être utilisés dans MATLAB de la même manière que les fichiers M.
À l'inverse, ils permettent aussi d'appeler directement des fonctions MATLAB dans du code C, C++ ou Fortran.
Voici le code MEX (en C) du fameux Hello World :
#include
"mex.h"
void
mexFunction( int
nlhs, mxArray *
plhs[],
int
nrhs, const
mxArray *
prhs[] ) {
mexPrintf("Hello World !
\n
"
);
}
Les trois raisons principales d'utiliser des fichiers MEX sont :
- la possibilité d'utiliser des routines C, C++ ou Fortran existantes sans avoir à les retranscrire en langage MATLAB (fichier M) ;
- l'amélioration de la vitesse d'exécution de certains codes MATLAB ;
- le moyen de masquer des informations confidentielles : les fichiers MEX sont des fichiers binaires compilés dont le contenu est illisible.
Lien : MEX-files Guide
Après avoir pris soin de choisir un compilateur adapté (voir Comment choisir le compilateur à utiliser pour créer un fichier MEX ?), la compilation se fait avec la fonction mexDocumentation de la fonction mex :
mex nomFichier.<ext>
% <ext> pouvant être c, cpp ou F selon le langage utilisé
Ce qui génère un fichier MEX binaire dont l'extension du nom dépend du système d'exploitation sur lequel il a été créé (voir Comment connaitre l'extension des fichiers MEX utilisés par ma version de MATLAB ?).
Un fichier MEX s'utilise comme une fonction MATLAB ordinaire.
On appelle ainsi simplement ce fichier en lui passant des arguments d'entrée et en récupérant des arguments de sortie :
sortie1, sortie2, …] = nomFichier(entree1, entree2, …)
Un fichier MEX est portable seulement si le système d'exploitation sur lequel il a été créé et celui sur lequel il sera exécuté sont totalement identiques.
Un fichier MEX compilé sous Windows ne fonctionnera donc pas sous Linux.
Un fichier MEX compilé sur une architecture 32 bits ne fonctionnera pas sur une architecture 64 bits.
Lien : Comment connaitre l'extension des fichiers MEX utilisés par ma version de MATLAB ?
Pour connaitre l'extension des fichiers MEX utilisés par MATLAB, on utilise la fonction mexextDocumentation de la fonction mexext.
Par exemple sous Windows 64 bits :
>> mexext
mexw64
Un fichier myfun.c compilé sous Windows 64 bits donnera donc un fichier MEX appelé myfun.mexw64.
Voici le tableau récapitulatif des extensions en fonction du système d'exploitation :
Plateforme | Extension |
---|---|
Linux (32 bits) | mexglx |
Linux (64 bits) | mexa64 |
Mac (Intel) | mexmaci |
Windows (32 bits) | mexw32 |
Windows (64 bits) | mexw64 |
La fonction mexFunction est le point d'entrée du fichier MEX (à la manière du main en langage C).
Elle prend toujours quatre arguments :
- nlhs : nombre d'arguments de sortie
- nrhs : nombre d'arguments d'entrée
- plhs : tableau de pointeurs contenant les sorties
- prhs : tableau de pointeurs contenant les entrées
En fonction du langage, elle prend la forme suivante :
-
en C/C++
Sélectionnez#include "mex.h"
void
mexFunction
(
int
nlhs, mxArray*
plhs[],/* Sorties */
int
nrhs,const
mxArray*
prhs[])/* Entrées */
{
/*
nlhs : Nombre de sorties demandées
plhs : Sorties
plhs[0] : sortie 1
plhs[1] : sortie 2
…
plhs[nlhs-1] : sortie nlhs
nrhs : Nombre d'entrées
prhs : Entrées
prhs[0] : entrée 1
prhs[1] : entrée 2
…
prhs[nrhs-1] : entrée nrhs
*/
/* code de la fonction */
}
-
en Fortran
Sélectionnez#
include
"fintrf.h"
subroutine
mexFunction(nlhs, plhs, nrhs, prhs)integer
nlhs, nrhs mwpointer plhs(*), prhs(*)C nlhs : Nombre de sorties demandées
C plhs : Sorties
C plhs(1) : sortie 1
C plhs(2) : sortie 2
C …
C plhs(nlhs) : sortie nlhs
C
C nrhs : Nombre d'entrées
C prhs : Entrées
C prhs(1) : entrée 1
C prhs(2) : entrée 2
C …
C prhs(nrhs) : entrée nrhs
C code de la fonction
return
end
Lien : C MEX Files - Build MATLAB functions from C/C++ functions
Lien : Create C Source MEX File
Oui. Par définition, un fichier MEX permet d'utiliser des fichiers codés en C, C++ ou Fortran directement dans MATLAB. Ces fichiers ont besoin d'être initialement compilés par MATLAB à l'aide d'un compilateur standard.
Lien : Quels sont les différents compilateurs supportés pour compiler un fichier MEX ?
Pour choisir le compilateur à utiliser parmi la liste des compilateurs installés, il faut utiliser la commande suivante :
mex -setup
En fonction du système d'exploitation et de votre configuration, MATLAB affiche alors des menus de choix.
- Sous Windows
>> mex -setup
Please choose your compiler for building external interface (MEX) files:
Would you like mex to locate installed compilers [y]/n?
Tapez sur la touche [Entrée] ou sur la touche [y] de votre clavier pour laisser MATLAB chercher et lister les compilateurs.
Si aucun compilateur n'est listé, voir Un compilateur externe est-il nécessaire pour créer un fichier MEX ?.
- Sous Linux
>> mex -setup
Options files control which compiler to use, the compiler and link command
options, and the runtime libraries to link against.
Using the 'mex -setup' command selects an options file that is
placed in ~/.matlab/R2009a and used by default for 'mex'. An options
file in the current working directory or specified on the command line
overrides the default options file in ~/.matlab/R2009a.
To override the default options file, use the 'mex -f' command
(see 'mex -help' for more information).
The options files available for mex are:
1: /usr/local/MATLAB/R2009a/bin/gccopts.sh :
Template Options file for building gcc MEX-files
2: /usr/local/MATLAB/R2009a/bin/mexopts.sh :
Template Options file for building MEX-files via the system ANSI compiler
0: Exit with no changes
Enter the number of the compiler (0-2):
La liste des compilateurs supportés par la dernière version de MATLAB est disponible dans la deuxième colonne de ce tableau : Supported and Compatible Compilers.
Pour les versions plus anciennes, voir la colonne de droite de ce tableau : System Requirements and Supported Compilers - Previous Releases.