FAQ MATLABConsultez toutes les FAQ

Nombre d'auteurs : 11, nombre de questions : 168, dernière mise à jour : 8 février 2020 

 
OuvrirSommaireFichiers MEX

MEX est l'acronyme de MATLAB Executable.

Créé le 28 octobre 2012  par Jérôme Briot

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 :

 
Sélectionnez
#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.
Mis à jour le 9 novembre 2012  par Jérôme Briot

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 :

 
Sélectionnez
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 ?).

Créé le 28 octobre 2012  par Jérôme Marsaguet

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 :

 
Sélectionnez
sortie1, sortie2, …] = nomFichier(entree1, entree2, …)
Créé le 28 octobre 2012  par Jérôme Marsaguet

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.

Créé le 28 octobre 2012  par Jérôme Briot

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 :

 
Sélectionnez
>> 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
Créé le 28 octobre 2012  par Jérôme Briot

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
Créé le 28 octobre 2012  par Jérôme Marsaguet, Jérôme Briot

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.

Créé le 30 septembre 2007  par Jérôme Briot

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 :

 
Sélectionnez
mex -setup

En fonction du système d'exploitation et de votre configuration, MATLAB affiche alors des menus de choix.

- Sous Windows

 
Sélectionnez
>> 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

 
Sélectionnez
>> 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):
Créé le 28 octobre 2012  par Jérôme Briot

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.

Mis à jour le 27 septembre 2012  par Jérôme Briot
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2007-2017 Developpez LLC Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.