Bonjour.
Dans le cadre de mon projet, je doit réutiliser des fonctions matlab dans un code C++ (codé à l'aide de Qt) afin de faire du traitement d'image. J'ai donc utilisé le Matlab Compiler pour générer une bibliothèque (contenant uniquement les fonctions imread, rgb2gray et fft2, c'est juste pour comprendre le fonctionnement de l'utilisation de ce genre de bibliothèque avant d'aller plus loin). Jusque là tout va bien: ma bibliothèque a été générée.
Je décide donc de l'inclure dans mon fichier .pro dans Qt
Fichier.pro:
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
| QT += widgets
SOURCES += \
main.cpp \
mafenetre.cpp
HEADERS += \
mafenetre.h
DISTFILES += \
lena.jpg
unix|win32: LIBS += -L$$PWD/'../../../../../../Program Files/MATLAB/MATLAB Compiler Runtime/v83/extern/include/' -lmclcommain
INCLUDEPATH += $$PWD/'../../../../../../Program Files/MATLAB/MATLAB Compiler Runtime/v83/extern/include'
DEPENDPATH += $$PWD/'../../../../../../Program Files/MATLAB/MATLAB Compiler Runtime/v83/extern/include'
unix|win32: LIBS += -L$$PWD/lib_test_lena/for_testing/ -llib_test_lena
INCLUDEPATH += $$PWD/lib_test_lena/for_testing
DEPENDPATH += $$PWD/lib_test_lena/for_testing |
Il y a donc la librairie du Matlab Component Runtime et la librairie lib_test_lena que j'ai créée. J'ai ensuite inclus cette librairie dans mafenetre.cpp:
#include "C:/Users\antoi/Documents/STAGE_QUEBEC/test_lena_matlab/lena_librairie_statique_test/for_testing/lena_librairie_statique_test.h"
C'est à partir de là que j'ai des problèmes:
En incluant lena_librairie_statique_test.h, j'inclue donc le header mclmcr.h provenant du Matlab Compiler. Et là, je reçoit une longue série d'erreurs, notamment: " 'mxInt64' has not been declared ". Pourtant, cette variable mxInt64 est censée être définie dans ce même fichier mclmcr.h si j'ai bien compris:
Fichier mclmcr.h:
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 29 30 31 32 33 34 35 36
| #if !defined(__MW_STDINT_H__)
# if defined( linux ) || defined( __linux ) || defined( __linux__ )
# include <stdint.h>
typedef int64_t mxInt64;
typedef uint64_t mxUint64;
# elif defined( macintosh ) || defined( __APPLE__ ) || defined( __APPLE_CC__ )
# if defined( __GNUC__ )
# include <stdint.h>
typedef int64_t mxInt64;
typedef uint64_t mxUint64;
# endif
# elif defined( sun ) || defined( __sun )
# include <inttypes.h>
typedef int64_t mxInt64;
typedef uint64_t mxUint64;
# elif defined( __hpux )
# include <inttypes.h>
typedef int64_t mxInt64;
typedef uint64_t mxUint64;
# elif defined(_MSC_VER)
typedef __int64 mxInt64;
typedef unsigned __int64 mxUint64;
# elif defined(__BORLANDC__)
typedef __int64 mxInt64;
typedef unsigned __int64 mxUint64;
# elif defined(__WATCOMC__)
typedef __int64 mxInt64;
typedef unsigned __int64 mxUint64;
# elif defined(__LCC__)
typedef __int64 mxInt64;
typedef unsigned __int64 mxUint64;
# endif
#else
typedef int64_T mxInt64;
typedef uint64_T mxUint64;
#endif |
S'agissant d'un code du Matlab Component Runtime, je n'ai pas la possibilité de le modifier pour chercher la raison de cette erreur.
Quelqu'un aurait il une idée de la raison qui pourrait provoquer cette erreur ?
Je pense que le problème doit venir de la manière dont j'ai inclut la librairie ou d'un problème de compatibilité compiler/librairie ou quelque chose dans le genre mais je ne m'y connais pas trop à ce sujet donc j'ai du mal à en savoir plus.
Pour info, je travaille sous windows 10, avec Qt5.7, mon projet Qt est compilé avec MinGW_32bits. J'ai la version 2014a de Matlab et la version 8.3 du Matlab Compiler (compatible avec Matlab 2014a).
J'espère avoir bien expliqué ma situation; n'hésitez pas si vous avez besoin de plus de précisions.
J'offre ma grande vénération à la personne qui arrivera à me sortir de mon impasse
PS: Ce projet concerne à la fois Matlab et C++ mais comme je pense que l'erreur vient plus de mon code C++ (sous Qt), j'ai jugé plus utile de le mettre dans la rubriaue C++ que Matlab.
Partager