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 :

[Compiler] Utiliser une fonction MATLAB en C++


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 11
    Points : 5
    Points
    5
    Par défaut [Compiler] Utiliser une fonction MATLAB en C++
    Déjà bonjour à tous, en général j'essaye de ne pas raconter mes problèmes et de chercher mais là je n'ai pas réussi à trouver la solution à mon problème. Je m'en remet donc à vous.

    Bon alors pour la petite histoire je travaille sur un simulateur de robots en c++ et j'ai besoin de faire une optimisation des forces de contacts. Pour cela mon boss m'a dit d'utiliser fmincon (qui a l'air de moins faire chier avec des contraintes que les autres fonctions d'optimisation que j'aie trouvé en c++).

    Donc voila où ça commence à poser problème. Comment utiliser une fonction matlab en c++ ? Ma recherche m'a menée au compiler matlab et j'ai donc fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mcc -vW cpplib:optimisation optimisation
    pour generer des fichiers optimisation.cpp et optimisation.h (j'en mettrai le code plus tard si ca vous interresse mais je ne pense pas que mon probleme soit lié à mon code de 10 lignes).

    Bref dans optimisation.cpp je trouve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void MW_CALL_CONV optimisation(int nargout, mwArray& X, const mwArray& J
                                   , const mwArray& Vl, const mwArray& X0
                                   , const mwArray& Mu, const mwArray& nbcontacts)
    Je me dit donc que c'est ma fonction. Je rajoute donc un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include "optimisation.h"
    #include "mclcppclass.h"
    au début de mon main (qui s'appelle dynamique.cpp) et tente un appel à optimisation() avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	// Output
    	mwArray X;
     
    	// Inputs
    	mwArray J(3*_totalNumberContacts, 3*_totalNumberContacts, mxDOUBLE_CLASS);
    	mwArray Vl;
    	mwArray X0;
    	mwArray Mu;
    	mwArray nbcontacts;
     
    	optimisation(1, X, J, Vl, X0, Mu, nbcontacts);
    ce qui me génère une erreur par ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    1>Dynamique.obj : error LNK2019: unresolved external symbol _mclcppCreateError referenced in function "public: __thiscall mwException::mwException(void)" (??0mwException@@QAE@XZ)
    1>Dynamique.obj : error LNK2019: unresolved external symbol _ref_count_obj_addref referenced in function "public: __thiscall mwException::mwException(class error_info *,bool)" (??0mwException@@QAE@PAVerror_info@@_N@Z)
    1>Dynamique.obj : error LNK2019: unresolved external symbol _ref_count_obj_release referenced in function "public: virtual __thiscall mwException::~mwException(void)" (??1mwException@@UAE@XZ)
    1>Dynamique.obj : error LNK2019: unresolved external symbol _error_info_get_message referenced in function "public: virtual char const * __thiscall mwException::what(void)const " (?what@mwException@@UBEPBDXZ)
    1>Dynamique.obj : error LNK2019: unresolved external symbol _mclcppGetLastError referenced in function "public: static void __cdecl mwException::raise_error(void)" (?raise_error@mwException@@SAXXZ)
    1>Dynamique.obj : error LNK2019: unresolved external symbol _mclGetEmptyArray referenced in function "public: void __thiscall Dynamique::test(void)" (?test@Dynamique@@QAEXXZ)
    1>Dynamique.obj : error LNK2019: unresolved external symbol _mclGetMatrix referenced in function "public: void __thiscall Dynamique::test(void)" (?test@Dynamique@@QAEXXZ)
    1>Dynamique.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl optimisation(int,class mwArray &,class mwArray const &,class mwArray const &,class mwArray const &,class mwArray const &,class mwArray const &)" (__imp_?optimisation@@YAXHAAVmwArray@@ABV1@1111@Z) referenced in function "public: void __thiscall Dynamique::test(void)" (?test@Dynamique@@QAEXXZ)
    1>Release/HRP2.exe : fatal error LNK1120: 8 unresolved externals
    Donc voila je ne comprend pas... J'ai pourtant bien ajouté "C:\Program Files\MATLAB\R2007a\extern\include" dans le path des librairies... Mais il doit y avoir un truc en plus à faire...

    Ah oui et je suis sous windows (on ne m'a pas laissé le choix...) avec Visual Studio et Matlab v7.4.0.287.

    Voila j'espère que vous pourrez m'aider à me sortir de mon problème, dans tous les cas merci de m'avoir lu jusqu'au bout

  2. #2
    Membre averti

    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 352
    Points
    352
    Par défaut
    Je ne suis pas un expert, mais a mon avis il te faut lier avec le bon fichier .lib a la compilation (que tu peux trouver dans le repertoire extern\lib\win32\microsoft\) de matlab (dans le cas ou tu compiles avec visual studio C++).

    Meilleures salutations,

    Gregoire

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Merci, je vais tester.

  4. #4
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Bon j'ai plus que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1>Dynamique.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl optimisation(int,class mwArray &,class mwArray const &,class mwArray const &,class mwArray const &,class mwArray const &,class mwArray const &)" (__imp_?optimisation@@YAXHAAVmwArray@@ABV1@1111@Z) referenced in function "public: void __thiscall Dynamique::test(void)" (?test@Dynamique@@QAEXXZ)
    1>Release/HRP2.exe : fatal error LNK1120: 1 unresolved externals
    Mais ya moyen que ça soit juste parce que j'appelle optimisation avec que des arguments vides...

  5. #5
    Membre averti

    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 352
    Points
    352
    Par défaut
    quand tu as compile avec mcc, je pense qu'un fichier .lib + .dll a dut etre genere, essaye de le lier ce .lib a ton application (et de mettre le dll dans le meme repertoire que ton .exe)

    Meilleures salutations,

    Gregoire

  6. #6
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Euh ben non justement ca ne les a pas créés (alors que le readme.txt généré en parle). Je vais regarder si j'ai pas oublié une option à mcc. Merci de ton aide.

  7. #7
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Ca a l'air de marcher en ajoutant -l à mcc. Encore merci !

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

Discussions similaires

  1. Utiliser une fonction Matlab avec LabVIEW
    Par larimoise dans le forum LabVIEW
    Réponses: 5
    Dernier message: 30/03/2015, 10h53
  2. Réponses: 2
    Dernier message: 13/06/2014, 11h33
  3. Comment créer un bloc qui utilise une fonction MATLAB
    Par Suzuki3694 dans le forum Simulink
    Réponses: 6
    Dernier message: 18/07/2011, 09h54
  4. [Débutant] Compiler une fonction MATLAB
    Par Thibaut B. dans le forum MATLAB
    Réponses: 4
    Dernier message: 23/09/2009, 10h25
  5. Utiliser une fonction de MATLAB dans un code C++
    Par Bella la vita dans le forum MATLAB
    Réponses: 6
    Dernier message: 15/01/2008, 15h18

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