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
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).
Code : Sélectionner tout - Visualiser dans une fenêtre à part mcc -vW cpplib:optimisation optimisation
Bref dans optimisation.cpp je trouve :
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 void MW_CALL_CONV optimisation(int nargout, mwArray& X, const mwArray& J , const mwArray& Vl, const mwArray& X0 , const mwArray& Mu, const mwArray& nbcontacts)
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 #include "optimisation.h" #include "mclcppclass.h"
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
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);
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...
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
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
Partager