IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Impossible de lier un projet écrit en C à MATLAB


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Impossible de lier un projet écrit en C à MATLAB
    Bonjour,
    je rencontre de grosses difficultés à compiler des MEX files.

    Toutes les configurations de bases marchent, en particulier le "Hello World" fonctionne sans problème (j'ai crée un MEX file affichant "Hello World", j'ai réussi à le compiler sans difficulté et l'appel de la fonction sous-jacente sous MATLAB résulte par l'affichage de "Hello World")

    Mon problème est plus poussé :
    j'ai un projet conséquent en C, plus de 10 000 lignes. Ce projet compile et fonctionne parfaitement.
    J'aurais souhaité pouvoir lier ce projet à MATLAB (pour des raisons qu'ils seraient trop long de détailler ici).
    J'ai donc écrit un Mex file dans lequel j'appelle une des fonctions de mon projet (elle s'appelle zigzag)

    Au moment de la compilation, plus d'une centaine d'erreurs apparaissent alors que mon projet initial fonctionne et aucune erreur ne vient du fichier MEX à proprement parlé (ici ZZ.c) .
    Le compilateur n'a pas l'air d’apprécier les conventions utilisé dans mon projet, parmi lesquels :
    - le standard c99
    - le fait de faire des déclaration un peu partout dans le fichier et pas qu'au début de la fonction
    - l'utilisation de type tels que unsigned long int, il semble n'aimer que les int

    J'ai utilisé la commande suivante pour compiler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mex COMPFLAGS="$COMPFLAGS -Wall -std=C99" ZZ.c zigzag.c
    J'obtiens le message :
    cl : Command line warning D9002 : ignoring unknown option '-std=C99'
    Comment lier mon projet à MATLAB sans devoir à réadapter mon projet?
    Le but des MEX files n'est il pas justement d'éviter tout un travail de réécriture de code?
    Ou les MEX files servent ils uniquement à implémenter du code destiné seulement à MATLAB? (parce que si MATLAB impose ces conventions, les MEX files ne servent pas à grand chose!)
    Existe-il d'autres outils plus adaptés pour mes besoins?

    Merci d'avance pour tout aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 165
    Points
    53 165
    Par défaut
    Quel compilateur as-tu utilisé ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Ah oui, pardon, je n'ai pas mentionné le compilateur.
    J'ai la version R2010 de Matlab et Visual Studio 2010, à l'aide d'un patch j'ai utilisé le compilateur Visual. C'est d'ailleurs le seul qu'il m'était proposé.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 165
    Points
    53 165
    Par défaut
    Je ne connais pas les options de compilation de ce compilateur mais es-tu sûr que "-std=C99" est bien supporté ? Il me semble que c'est un argument de gcc, non ?

    Pourquoi ne pas simplement faire mex ZZ.c zigzag.c ?

    MATLAB utilise un fichier d'options de compilation mexopts.bat que tu trouveras dans le dossier de préférence (voir la fonction PREFDIR). Tu peux t'aider de la documentation de ton compilateur pour déterminer quelles options sont définies dans ce fichier.

    Sinon pour "intégrer" un programme C sous MATLAB, il y a plusieurs possibilités (si je ne dis pas trop de bêtises)

    Soit tu fais tout compiler par MATLAB. Dans ce cas, il te faut un fichier C-MEX qui fait la passerelle entre MATLAB et ton code C

    Soit tu compiles ton code C sous forme de bibliothèque que tu appelles sous MATLAB à l'aide de la fonction LOADLIBRARY
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Je ne connais pas les options de compilation de ce compilateur mais es-tu sûr que "-std=C99" est bien supporté ? Il me semble que c'est un argument de gcc, non ?
    Je ne sais pas trop comment tout cela marche, en tout cas en plus des erreurs de compilation, il m'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cl : Command line warning D9002 : ignoring unknown option '-std=C99'
    MATLAB utilise un fichier d'options de compilation mexopts.bat que tu trouveras dans le dossier de préférence (voir la fonction PREFDIR). Tu peux t'aider de la documentation de ton compilateur pour déterminer quelles options sont définies dans ce fichier.
    En effet, mais la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mex COMPFLAGS="$COMPFLAGS -Wall -std=C99" ZZ.c zigzag.c
    est un raccourci pour réécrire la variable COMPFLAGS.
    Donc si ça ne marche pas comme ça, peu de chance que sa marche autrement.

    Pourquoi ne pas simplement faire mex ZZ.c zigzag.c ?
    Tout simplement parce que cela me produit les mêmes erreurs.
    Je pensais pouvoir remédier à cela avec ces options de compilations, mais sans aucun effet.

    Soit tu fais tout compiler par MATLAB. Dans ce cas, il te faut un fichier C-MEX qui fait la passerelle entre MATLAB et ton code C
    C'est précisément ce que j'essaie de faire, en vain. Ce que je ne comprends pas, c'est que je réussis un faire un "vrai" exécutable (un fichier elf si tu préfères) mais pas un exécutable pour Matlab. Pourquoi m'affiche-t-il toutes ces erreurs?

    Soit tu compiles ton code C sous forme de bibliothèque que tu appelles sous MATLAB à l'aide de la fonction LOADLIBRARY
    Je connaissais pas, ça pourrai m'être utile?

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 165
    Points
    53 165
    Par défaut
    Citation Envoyé par Nasire Voir le message
    j'ai un projet conséquent en C, plus de 10 000 lignes. Ce projet compile et fonctionne parfaitement.
    Avec le même compilateur (Visual C++ 2010) ?

    Car les erreurs lors de la compilation (grâce à la fonction MEX) sont dues au compilateur, pas à MATLAB...

    Citation Envoyé par Nasire Voir le message
    En effet, mais la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mex COMPFLAGS="$COMPFLAGS -Wall -std=C99" ZZ.c zigzag.c
    est un raccourci pour réécrire la variable COMPFLAGS.
    Je suis d'accord mais si tu ne passes pas les bonnes options à ton compilateur, il ne faut pas chercher à blâmer MATLAB. De toute façon, ce que tu nous montre n'est pas une erreur mais un avertissement (warning). Je suppose (à vérifier donc) que le compilateur ne tient pas compte de l'option incorecte (ici '-std=c99').
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

Discussions similaires

  1. [MAVEN2] Impossible de créer le projet base ?
    Par elitost dans le forum Maven
    Réponses: 1
    Dernier message: 02/11/2005, 15h58
  2. Jbuilder2006 impossible de compiler mon projet
    Par danje dans le forum JBuilder
    Réponses: 4
    Dernier message: 01/11/2005, 23h32
  3. [Dev-cpp] Impossible de compiler le projet !
    Par Franck.H dans le forum Dev-C++
    Réponses: 5
    Dernier message: 18/10/2005, 11h55
  4. [ASP] message d'erreur (impossible d'excuter un projet ...)
    Par haganidjamel dans le forum Delphi .NET
    Réponses: 6
    Dernier message: 06/09/2005, 17h28
  5. [Kylix] Impossible de lier
    Par Scoobs dans le forum EDI
    Réponses: 2
    Dernier message: 20/05/2003, 16h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo