[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:
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:
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:
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:
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:
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 :)