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 :

Function C dans du code MATLAB


Sujet :

MATLAB

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 19
    Par défaut Function C dans du code MATLAB
    Bonjour,

    je reprends un code sous matlab qui inclut de nombreux fonction .m mais aussi quelques fonctions .c

    Etant debutant et ne sachant pas vraiment comment faire tourner j'aurai quelque questions si des personnes sont familieres avec ce genre de probleme :

    - Dois-je compiler pour que les fonctions .c marche ? lorsque j'qpelle mon code et que lui meme fait appel a ces fonctions .c comment ca marche ?
    - En particulier, une des fonctions .c a elle-meme besoin de librairies externes pour tourner. Au debut du code il y a la ligne:
    #include <fftw3.h>
    qui correspond au header de la librairie mais il me semblait que les librairies etaient associes aux compileurs donc comment faire pour que mon code matlab prenne en compte cette libraire ? J'ai telecharger les fichier de la libraire avec le header et des fichiers .def .ddl et .exe mais je ne sais pas comment les installer et ou les mettre pour que matlab les prenne en compte ?

    - Lorsque mon code fait appel a cette fonction .c il me sort une erreur comme quoi elle n'est pas definie :
    Undefined function 'optimFourrier' for input arguments of type 'double'.

    Merci d'avance pour votre aide !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 189
    Par défaut
    Salut,
    il te faut faire compiler les fichiers .c par matlab pour en faire des MEX
    je te conseille de lire la doc matlab qui en parle pour te faire la main, il y a un petit exemple didactique à la fin.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 19
    Par défaut
    ok merci pour ton aide !

    J'ai essaye de faire tourner mex pour compiler mes fichiers en utilisant la librairie fftw que j'ai telecharger ici http://www.fftw.org/install/windows.html

    La librairie est deja precompile donc je n'ai rien a faire niveau installation ? En faisant tourner mex en precisant la localisation de ma librairie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mex gridOptim.c -lfftw3 -L'C:\Program Files\MATLAB\R2011b\sys\lcc\FFTW' -I'C:\Program Files\MATLAB\R2011b\sys\lcc\include'
    il trouve bien le "header" fftw3 mais j'obtient ces lignes d'erreurs (je suis débutant donc il y suremment un truc qui m'échappe):

    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  missing identifier 
    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  syntax error; found `void' expecting `;' 
    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  redeclaration of `fftw_plan' previously declared at C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h 357 
    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  syntax error; found `fftw_plan_dft' expecting `;' 
    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  redeclaration of `fftw_plan' previously declared at C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h 357 
    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  syntax error; found `fftw_plan_dft_1d' expecting `;' 
    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  redeclaration of `fftw_plan' previously declared at C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h 357 
    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  syntax error; found `fftw_plan_dft_2d' expecting `;' 
    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  redeclaration of `fftw_plan' previously declared at C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h 357 
    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  syntax error; found `fftw_plan_dft_3d' expecting `;' 
    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  redeclaration of `fftw_plan' previously declared at C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h 357 
    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  syntax error; found `fftw_plan_many_dft' expecting `;' 
    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  redeclaration of `fftw_plan' previously declared at C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h 357 
    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  syntax error; found `fftw_plan_guru_dft' expecting `;' 
    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  redeclaration of `fftw_plan' previously declared at C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h 357 
    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  syntax error; found `fftw_plan_guru_split_dft' expecting `;' 
    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  redeclaration of `fftw_plan' previously declared at C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h 357 
    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  syntax error; found `fftw_plan_guru64_dft' expecting `;' 
    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  redeclaration of `fftw_plan' previously declared at C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h 357 
    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  syntax error; found `fftw_plan_guru64_split_dft' expecting `;' 
    Error gridOptim.c: C:\Program Files\MATLAB\R2011b\sys\lcc\include\fftw3.h: 357  too many errors

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 189
    Par défaut
    salut,

    apparemment t'es pas le seul
    http://www.mathworks.com/matlabcentr..._thread/271464

    essaye de compiler avec autre chose que LCC (le compilo de base de Matlab), via

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 19
    Par défaut
    ok merci pour ta réponse !

    J'ai en effet changer de compileur (j'utilise Microsoft Visual C++ 2010 Express maintenant) mais j'ai un autre probleme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Warning: MEX could not find the library "fftw3" specified with -l option. 
             MEX looked for a file with one of the names: 
                   fftw3.lib 
                   libfftw3.lib
    Ma librairie est composé d'un fichier header .h et de plusieurs fichiers .exe .dll et .def alors que visiblement il recherche un fichier .lib

    Dans le message que tu as mis en lien il dit au début ("I have a header file and 3 .dll files which I converted into .lib using lcc_implib.exe." donc je comprends qu'il faut que je transforme mes fichiers en .lib mais je comprends pas comment "utiliser lcc_implib.exe")

    Si quelqu'un peut m'expliquer rapidement la difference entre ce que j'ai et ce qu'il recherche et comment je pourrai transformer ma librairie en fichier .lib ?

    Merci d'avance

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Dans le lien même de la bibliothèque FFTW que tu donnes, on peut y lire :
    In order to link to them from Visual C++, you will need to create .lib "import libraries" using the lib.exe program included with VC++. Run:
    lib /def:libfftw3-3.def
    lib /def:libfftw3f-3.def
    lib /def:libfftw3l-3.def
    Ouvre donc une invite de commandes VC 2010 et exécutes ces lignes dans le dossier que tu as décompressé.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 19
    Par défaut
    ok merci pour ta réponse, je n'utilisais pas visual C++ au début donc j'avais zappé ces lignes,

    maintenant j'ai du mal a voir comment gérer l'invite commande sous C++ je m'explique:

    donc j'ouvre C++ 2010 express, la q partir d'un projet j'ouvre l'invite commande mais je n'ai pas du tout trouvé comment se mettre dans le dossier de ma libraire (ie les commandes types cd ou md ne marchent pas) et je n'ai pas trouvé d'info sur internet sur comment a partir de la fenetre commande pouvoir se mettre dans le dossier que l'on souhaite pour y lancer des instructions ? Ou peut-être que je m'y prends n'importe comment ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Pas la peine de passer par l'IDE. Ouvre juste la fenêtre de commandes.
    C'est bien cd qu'il faut utiliser pour aller dans ton dossier, et cela devrait normalement fonctionner. Que fais-tu exactement ?

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 19
    Par défaut
    ok en faite je ne savais pas que l'on pouvait ouvrir une fenetre de commande directement pour le compilateur !

    Donc c'est bon je l'ai ouverte et je me suis mis dans le dossier mais quand je veux lancer les lignes pour creer le fichier .lib j'ai les erreurs suivantes (voir fichier joint)Nom : erreurcommande.png
Affichages : 709
Taille : 34,6 Ko

  10. #10
    Invité
    Invité(e)
    Par défaut
    Étant situé dans le dossier C:\Program File, la fenêtre "normale" n'a pas les droits suffisants. Lorsque tu la lances, clic droit sur l'icône > Exécuter en tant qu'administrateur.

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 19
    Par défaut
    ok merci beaucoup ca marche maintenant !

    En tout cas la fonction mex marche et maintenant en plus de ma fonction gridOptim.c j'ai aussi une fonction gridOptim.mexw32 qui a ete compile

    Malgre cela j'ai l'erreur suivante lorsque j'apelle le programme :

    Invalid MEX-file 'C:\Users\Documents\MATLAB\gridOptim.mexw32': The
    specified module could not be found.

    Em gros mon programme Matlab apelle la fonction gridOptim et a ce moment la il me ressort une erreur.

  12. #12
    Invité
    Invité(e)
    Par défaut
    As-tu bien placé les .dll de la bibliothèque FFTW à côté ?

  13. #13
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Je trouve pour ma part que tu n'aurais pas dû mettre les fichiers de la bibliothèque FFTW dans le dossier d'installation de MATLAB.

    Il aurait été plus propre de les mettre par exemple dans le dossier "Mes Documents/MATLAB/FFTW"

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 19
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    As-tu bien placé les .dll de la bibliothèque FFTW à côté ?
    heu a coté de quoi ? les fichiers .dll sont bien dans le dossier FFTW et je ne les ai pas deplaces.
    Je trouve pour ma part que tu n'aurais pas dû mettre les fichiers de la bibliothèque FFTW dans le dossier d'installation de MATLAB.

    Il aurait été plus propre de les mettre par exemple dans le dossier "Mes Documents/MATLAB/FFTW"
    ok c'est corrigé merci

  15. #15
    Invité
    Invité(e)
    Par défaut
    Dans le même dossier que le fichier .mexw32

  16. #16
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 19
    Par défaut
    j'ai mis une copie des fichiers .dll dans le dossier de mon code mais ca ne resout pas le probleme

    ah si en faite le message d'erreur a change et maintenant il est ecrit :

    C:\Users\Documents\MATLAB\gridOptim.mexw32 is not a valid Win32
    application.

  17. #17
    Invité
    Invité(e)
    Par défaut
    As-tu bien pris la version 32 bits de la bibliothèque ?
    En revoyant ton image ... attention de spécifier /machine:x86 et non 64.

  18. #18
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 19
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    As-tu bien pris la version 32 bits de la bibliothèque ?
    En revoyant ton image ... attention de spécifier /machine:x86 et non 64.
    oui pour la derniere fois jai rien specifie et il a pris x86 pris par défaut.

    Par contre mon windows est 64-bit donc je ne sais pas si ca doit être consistant ou si c'est normal ?

  19. #19
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Que renvoie ceci depuis la fenêtre de commande de MATLAB ?


  20. #20
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 19
    Par défaut
    >> computer

    ans =

    PCWIN

Discussions similaires

  1. Fonction "poly2trellis" dans un code matlab
    Par imen59 dans le forum Signal
    Réponses: 0
    Dernier message: 27/11/2010, 15h24
  2. [MEX] utiliser une dll C dans le code matlab
    Par hector2 dans le forum MATLAB
    Réponses: 2
    Dernier message: 18/06/2010, 15h53
  3. [Débutant] commande d'enregistrement dans un code matlab
    Par Marwa25 dans le forum MATLAB
    Réponses: 2
    Dernier message: 06/12/2009, 13h47
  4. Problème dans un code de matlab
    Par hanane78 dans le forum MATLAB
    Réponses: 8
    Dernier message: 25/04/2007, 16h29
  5. Utilisation du code MATLAB dans environnement .NET
    Par SOPRA-Eherve dans le forum MATLAB
    Réponses: 5
    Dernier message: 28/11/2006, 12h43

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