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

C Discussion :

Utilisation de la bibliothèques ".mat" en C


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 34
    Par défaut Utilisation de la bibliothèques ".mat" en C
    Bonjour à tous,

    Je cherche actuellement à créer, grâce au langage C, un code permettant de créer un fichier ".mat" (donc compris par le logiciel Matlab). Après recherche sur mon ami google, j'ai trouver ce lien (http://www.mathworks.fr/fr/help/matl...?s_tid=doc_12b) qui propose des fonctions intéressantes.

    Cependant, je n'arrive pas à utiliser ces fonctions car mon IDE (Codes::Blocks) ne reconnais pas cette bibliothèques. Quelqu'un s'est-il comment configurer Codes::Blocks pour que je puisse utiliser ces fonctions ? J'ai fais des recherches, mais ça me re-dirige toujours vers des réponses sur la bibliothèque ".math" qui ne m'intéresse pas du tout pour le coup.

    Merci d'avance pour vos réponse ou au moins pour avoir pris la peine de lire mon post , j'ai hésité à le mettre sur le forum Matlab, pardonez-moi si je me suis trompé

    Bonne soirée.

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Matlab est assez limitant quand aux choix des compilateurs utilisables. Il y a quelques années, gcc (et donc mingw, son portage pour Windows) n'était pas accepté. CodeBlocks utilise par défaut ces compilateurs… Il faudrait vérifier cela.

    As-tu téléchargé les fichiers de la bibliothèque ? Où les as-tu récupéré ?

    Si tu n'as pas de réponses satisfaisantes ici, je pourrais déplacer la discussion sur le forum Matlab, mais je pense que tu as bien fait de poster ici d'abord.

  3. #3
    Membre averti
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 34
    Par défaut
    Désolé c'est vrai que j'ai été un peu imprécis.

    Pour répondre à tes question, j'ai récupérer la bibliothèques "mat.h" grâce aux logiciel "MCR" (version 7.15) ou on trouve dans le dossier "C:\Program Files (x86)\MCR\v715\extern\include" le fichier "mat.h".

    Ensuite, pour l'utiliser dans Code::Blocks, je me suis inspiré de la méthode pour utiliser la pack GTK+ en insérant le "\bin" et le "\lib" aux endroits ou il faut, c'est à dire "Setting >> Compiler..." puis dans les onglets
    - "Search directories >> Compiler" j'ai rajouté "C:\Program Files (x86)\MCR\v715\extern\include"
    - "Search directories >> Linker" j'ai rajouté "C:\Program Files (x86)\MCR\v715\extern\lib"
    - "Search directories >> Ressource compiler" j'ai rajouté "C:\Program Files (x86)\MCR\v715\bin"


    Ensuite j'ai écris ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include "mat.h"
     
    void createMatlabFile()
    {
        //Programme
        MATFile *fp;
        fp = matOpen("Test", "w");
    }
    Et il me renvoie comme erreur que la référence vers "matOpen" n'est pas définis (cependant il reconnait bien la librairie "mat.h" et le type "MATFile".

    Voilà vous savez tous je pense , merdi d'avance pour votre aide

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Tout comme le préprocesseur cherche dans les "includes paths" les fichiers utilisés dans les #include "...", le linker cherche les bibliothèques spécifiées dans les "library paths".

    Un peu comme dans ma signature, tu ne dis pas à ton linker le nom de la bibliothèque. Les chemins c'est bien mais il faut lui dit quoi prendre.

  5. #5
    Membre averti
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 34
    Par défaut
    Merci pour cette réponse, j'ai essayé de mettre en oeuvre ce que tu dis dans ta signature, c'est à dire que que je suis allé dans "project >> build option" onglet "Linker settings" et j'ai rajouté "libmat" et "libmx"

    Mais maintenant, quand j'essaye de compiler, ça me met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    == Build: Debug in Projet (compiler: GNU GCC Compiler ===
    ld.exe   cannot find -lmat
    === Build failed
    je pense que je doit rajouter quelques chose dans "Projetc >> Build option" onglet "Compiler settings >> Other options" mais je n'ai aucune idée de ce que je dois mettre

    PS : j'ai rajouter ces fichiers car il est noté en commentaire dans le fichier "mat.h" ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /* PUBLISHed header for libmat, the MAT File library. */
    Après je sais pas s'il est nécessaire de mettre d'autres choses

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Tu peux faire un screenshot de ton onglet Linker Settings ?

    Non, tu n'as normalement rien à rajouter dans les Other Options du compilateur. Cela te permet de rajouter des options qui ne sont pas disponibles dans la liste avec les cases à cocher. Ici, c'est bien une erreur de ld, donc la compilation s'est bien passé et le problème est uniquement à l'édition des liens. Je pense que ce n'est qu'une histoire de paramètres pour le linker.

  7. #7
    Membre averti
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 34
    Par défaut
    J'ai mis le lien en pièce jointe, ce qui se trouvent avant sert pour utiliser la bibliothèque GTK+.

    J'avoue que je suis un peu perdu, je te remercie encore de ton aide
    Images attachées Images attachées  

  8. #8
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    A tout hasard, tu n'aurais pas simplement cliquer sur Add, écrit "libmat" et cliqué sur OK ? Tu as bien cliqué sur les 3 petits points pour aller chercher le fichier à l'endroit ou il se trouve ?

    Car moi, si je fais ça, j'ai quelque chose qui ressemble à l'image en pièce jointe.

    D'après ce que tu dis, les lib ne sont pas dans le dossier courant donc tu devrais avoir un chemin (au moins relatif) pour y accéder.
    Images attachées Images attachées  

  9. #9
    Membre averti
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 34
    Par défaut
    Ah, je crois que tu as soulevé quelque chose d'intéressant, j'ai rajouté le libmat.lib comme tu l'as fais, ce qui donne le screen 1 (nom complet : "C:\MATLAB\V_712\soft\extern\lib\win32\lcc\libmat.lib")

    il accepte de compiler mais il me mets le message de screen2 lorsqu'il execute le programme, pourtant, j'ai bien ce fichier dans le répertoire : "C:\MATLAB\V_712\soft\bin\win32" faut-il que je mette le .dll dans un autre dossier ?
    Images attachées Images attachées   

  10. #10
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Il faut le mettre dans un dossier où Windows cherche ses DLL. Essaye de le mettre dans le même dossier que l'exécutable et double-clique sur l'exécutable pour le lancer.

  11. #11
    Membre averti
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 34
    Par défaut
    Bonjour,

    désolé de pas avoir répondu ces derniers jours mais je n'avais plus accès à internet ^^

    Je viens d'essayer ta proposition en insérant directement les .dll dans le dossier ou se trouve l'éxecutable, et après avoir dû répondre aux caprices du compilateur pour insérer les fichiers ".dll" qu'il voulait (voir le premier screen), je tombe finalement sur ce messsage => voir le deuxième screen joint, qui me laisse pour le moins perplexe

    Vous avez déjà vu ça précedement ?

    Nom : screen3.png
Affichages : 400
Taille : 136,2 Ko
    Nom : screen4.png
Affichages : 365
Taille : 28,2 Ko

  12. #12
    Membre averti
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 34
    Par défaut
    Personne a une petite idée pour me débloquer ?
    J'ai l'impression que le problème vient plus de windows maintenant mais je sais pas comment déplacer le topic

  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
    Plutôt que d'utiliser les dll fournies par MathWorks (dont je doute d'ailleurs que tu aies le droit de les redistribuer), j'utiliserais plutôt cette bibliothèque indépendante : MAT File I/O Library

  14. #14
    Membre averti
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 34
    Par défaut
    Bonjour,

    Merci beaucoup de ton aide, je ne connaissais pas cette bibliothèque. Je l'ai donc téléchargé et insérer le dossier "matio-1.5.2" à la racine de mon projet. J'ai ensuite rajouté ceci dans mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    #include "../matio-1.5.2/src/matio.h"
    #include "../matio-1.5.2/src/matio_pubconf.h"
    #include "../matio-1.5.2/src/matioConfig.h"
     
    int openMatlabFile(char* nameMatlabFile, donnees *d)
    {
        mat_t *fp = NULL;
        fp = Mat_Open(nameMatlabFile, MAT_ACC_RDWR);
        if( fp == NULL)
        {
            editTextViews(d, "-- Matlab File opening FAILED -- (fp = NULL) \n", 3);
            editTextViews(d, "-- STOP EXECUTING PROGRAMM -- \n", 3);
            return 0;
        }
     
        editTextViews(d, "-- Matlab File opening SUCCESS \n", 1);
     
        return 1;
    }
    Cependant, Codes::Blocks me revoie que la référence vers la fonction "Mat_Open" n'est pas définis, ce qui est un peu étrange car elle est bien présente dans le fichier "matio.h". De plus, il ne me marque aucune erreur pour la définition de ma variable "mat_t *fp", je comprends pas trop pourquoi il arrive à retrouver les types de variable mais pas les fonctions

  15. #15
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut

    As-tu modifier ton library path pour prendre en compte cette nouvelle bibliothèque ?

  16. #16
    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
    Il faut préalablement compiler cette bibliothèque à partir de ces sources.

  17. #17
    Membre averti
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 34
    Par défaut
    Bktero : d'après ce que j'ai compris, pour modifier le library path, il faut aller dans "Project >> build option >>linker setting" et à ce moment là y rajouter les fichiers qui nous intéresse. Cependant, lorsque l'on ouvre l'explorer de fichier, il ne cherche que les points ".a", ".so", ".lib" et ".dylib" et il n'y a aucun fichier de ce type dans le dossier "matio-1.5.2"

    Dut : comment peut-on faire pour compiler la bibliothèque ? J'ai vu sur le lien que tu m'as donné, une ligne de commande mais ça ressemblais à du linux, et je suis sous Windows 7.

  18. #18
    Membre averti
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 34
    Par défaut
    Bonjour,

    Après avoir pas mal bidouiller, j'ai finalement rajouter le fichier "matio.pc.in" dans le linker settings, et le compilateur me dis maintenat qu'il ne peut pas trouver "-lmatio"... (bon, j'ai peut être fais n'importe quoi, mais c'est la seul action qui a changé quelque chose )

    Les seuls fichiers qui ressemblent de loin à des bibliothèques sont les fichiers "libmatio.vcproj" et "libmatio.vcxproj" que l'on trouve dans le répertoire "C:\matio-1.5.2\visual_studio\libmatio" ; sauf que visiblement ces fichiers sont plutôt adaptés pour le soft visual studio, ne serai-ce pas possible d'utiliser tous de même ces fichiers avec Code::blocks en tant que .dll ou quelques choses dans ce genre là ?

    Bonne journée.

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