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 :

lier une lib externe [MEX]


Sujet :

MATLAB

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 352
    Points
    352
    Par défaut lier une lib externe
    bonjour,
    mon sujet ressemble fortement a celui ci


    j'essaye de lier la bibliothèque SpectralRadar.lib pour l'utiliser dans un mex-file
    cette bibliothèque sert a piloté un SD-OCT de chez thorlabs.

    voici la ligne qui me permet de compiler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mex test_mex.cpp D:\HCE\mexfile\SpectralRadar.lib
    et voici le fichier mex
    Code C++ : 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
    21
    22
    23
    24
    25
    26
    27
    28
     
    #include "matrix.h"
    #include "mex.h"
    #include <iostream>
     
    using namespace std;
     
     
     
    #include "SpectralRadar.h"
    // test acquisition d'un A-scan
    void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[])
    {
     
        char message[1024];
        cout<<"test\n"<<endl;
    	OCTDeviceHandle Dev = initDevice();
    // 
    //     if(getError(message, 1024))
    // 	{
    // 		cout << "ERROR: " << message << endl;
    // 		_getch();
    // 		return;
    // 	}
    //     
        closeDevice(Dev);
     
    }


    j'obtiens le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     Creating library C:\Users\RUIVOC\AppData\Local\Temp\mex_0LDnql\templib.x and object C:\Users\RUIVOC\AppData\Local\Temp\mex_0LDnql\templib.exp 
    test_mex.obj : error LNK2019: unresolved external symbol __imp_closeDevice referenced in function mexFunction 
    test_mex.obj : error LNK2019: unresolved external symbol __imp_initDevice referenced in function mexFunction 
    test_mex.mexw64 : fatal error LNK1120: 2 unresolved externals

    donc visiblement le .lib n'est pas lié...
    ou est-ce que j'ai merdé ^^?

  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 : 52 882
    Points
    52 882
    Par défaut
    Essaie comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mex test_mex.cpp -I"D:/HCE/mexfile/" -L"D:/HCE/mexfile/" -lSpectralRadar
    Si le fichier .h et .lib sont bien dans le même dossier

    Si ça ne fonctionne toujours pas, montre nous ce que renvoie mex avec l'argument -v.

    Cette bibliothèque est-elle disponible sur internet ?
    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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 352
    Points
    352
    Par défaut
    merci de ta reponse ultra rapide

    la correction n'a rien donné

    voici le message que me ressort mex avec l'argument -v

    ***************************************************************************
    Warning: Neither -compatibleArrayDims nor -largeArrayDims is selected.
    Using -compatibleArrayDims. In the future, MATLAB will require
    the use of -largeArrayDims and remove the -compatibleArrayDims
    option. For more information, see:
    http://www.mathworks.com/help/matlab...4-bit-api.html
    ****************************************************************************

    -> Default options filename found in C:\Users\RUIVOC\AppData\Roaming\MathWorks\MATLAB\R2013a
    ----------------------------------------------------------------
    -> Options file = C:\Users\RUIVOC\AppData\Roaming\MathWorks\MATLAB\R2013a\mexopts.bat
    MATLAB = C:\Program Files\MATLAB\R2013a
    -> COMPILER = cl
    -> Compiler flags:
    COMPFLAGS = /c /GR /W3 /EHs /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /nologo /MD
    OPTIMFLAGS = /O2 /Oy- /DNDEBUG
    DEBUGFLAGS = /Z7
    arguments = -ID:/HCE/mexfile/
    Name switch = /Fo
    -> Pre-linking commands =
    -> LINKER = link
    -> Link directives:
    LINKFLAGS = /dll /export:mexFunction /LIBPATH:"C:\Program Files\MATLAB\R2013a\extern\lib\win64\microsoft" libmx.lib libmex.lib libmat.lib /MACHINE:X64 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /manifest /incremental:NO /implib:"C:\Users\RUIVOC\AppData\Local\Temp\mex_l9qYXw\templib.x" /MAP:"test_mex.mexw64.map"
    LINKDEBUGFLAGS = /debug /PDB:"test_mex.mexw64.pdb"
    LINKFLAGSPOST =
    Name directive = /out:"test_mex.mexw64"
    File link directive =
    Lib. link directive =
    Rsp file indicator = @
    -> Resource Compiler = rc /fo "mexversion.res"
    -> Resource Linker =
    ----------------------------------------------------------------


    --> cl -ID:/HCE/mexfile/ /c /GR /W3 /EHs /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /nologo /MD /FoC:\Users\RUIVOC\AppData\Local\Temp\mex_l9qYXw\test_mex.obj -I"C:\Program Files\MATLAB\R2013a\extern\include" -I"C:\Program Files\MATLAB\R2013a\simulink\include" /O2 /Oy- /DNDEBUG -DMX_COMPAT_32 test_mex.cpp

    test_mex.cpp
    Contents of C:\Users\RUIVOC\AppData\Local\Temp\mex_l9qYXw\mex_tmp.rsp:
    C:\Users\RUIVOC\AppData\Local\Temp\mex_l9qYXw\test_mex.obj


    --> link /out:"test_mex.mexw64" /dll /export:mexFunction /LIBPATH:"C:\Program Files\MATLAB\R2013a\extern\lib\win64\microsoft" libmx.lib libmex.lib libmat.lib /MACHINE:X64 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /manifest /incremental:NO /implib:"C:\Users\RUIVOC\AppData\Local\Temp\mex_l9qYXw\templib.x" /MAP:"test_mex.mexw64.map" @C:\Users\RUIVOC\AppData\Local\Temp\mex_l9qYXw\mex_tmp.rsp D:\HCE\mexfile\SpectralRadar.lib

    Creating library C:\Users\RUIVOC\AppData\Local\Temp\mex_l9qYXw\templib.x and object C:\Users\RUIVOC\AppData\Local\Temp\mex_l9qYXw\templib.exp
    test_mex.obj : error LNK2019: unresolved external symbol __imp_closeDevice referenced in function mexFunction
    test_mex.obj : error LNK2019: unresolved external symbol __imp_initDevice referenced in function mexFunction
    test_mex.mexw64 : fatal error LNK1120: 2 unresolved externals

    C:\PROGRA~1\MATLAB\R2013A\BIN\MEX.PL: Error: Link of 'test_mex.mexw64' failed.

    Error using mex (line 206)
    Unable to complete successfully.

    Error in main (line 3)
    mex -v test_mex.cpp -I"D:/HCE/mexfile/" -L"D:/HCE/mexfile/" -lSpectralRadar

    la lib est fournis avec le logiciel de l'OCT
    je regarde si je peux trouver l'un ou l'autre en ligne

  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 : 52 882
    Points
    52 882
    Par défaut
    Est-ce une bibliothèque 32 bits ou 64 bits ?

    As-tu essayé avec une version 32 bits de MATLAB ?
    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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 352
    Points
    352
    Par défaut
    je viens de vérifier et effectivement c'est une version 32bits....

    malheureusement je n'ai pas de version 32 bits de matlab

    est-il possible de créer ma mex via visual studio en 32 bits puis de l'utiliser sous matlab?

  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 : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par gpcbitnik38 Voir le message
    est-il possible de créer ma mex via visual studio en 32 bits puis de l'utiliser sous matlab?
    => FAQ : Un fichier MEX est-il portable ?
    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)

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 352
    Points
    352
    Par défaut
    voila qui repond a ma question ^^
    merci beaucoup dut

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 17/01/2009, 13h10
  2. Utilisé une lib externe perso
    Par alpha_one_x86 dans le forum Qt
    Réponses: 4
    Dernier message: 03/01/2009, 10h56
  3. [export jar] inclure une lib externe
    Par EpOnYmE187 dans le forum Eclipse Java
    Réponses: 8
    Dernier message: 14/03/2008, 16h23
  4. Comment faire pour integrer une lib externe
    Par X-plode dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 25/04/2007, 15h54
  5. Lier une lib avec GCC?
    Par Charlemagne dans le forum Autres éditeurs
    Réponses: 13
    Dernier message: 10/05/2006, 15h19

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