bibliothèque liaison Matlab partagée dans Qt (Windows)
-
12-10-2019 - |
Question
Je veux utiliser l'API C de Matlab au sein de l'intervalle QT (http://www.mathworks.com/help/techdoc/matlab_external/f39876.html#bsfvqhp-1) sous Windows pour ouvrir un fichier .mat. Dans mon dossier .pro J'ai inclus
INCLUDEPATH += "C:\Program Files\MATLAB\R2010b\extern\include"
qui fonctionne très bien (les compiles de code). Mais en essayant de lier le fichier libmat.lib (j'ai lu les fichiers .dll ne peuvent pas être liés directement) à l'aide
LIBS += -L"C:\Program Files\MATLAB\R2010b\extern\lib\win32\microsoft" -llibmat
l'application se bloque lors de l'exécution. L'erreur donnée dit [file].exe exited with code -1073741515
Je ne suis ni un QT, ni un expert de Windows, mais pour ce projet, je suis obligé d'utiliser les deux (je suppose que ce serait plus facile de résoudre ce problème dans GNU / Linux) de sorte que toute aide serait appréciée. Sous Windows XP, la version QT 4.7.0 avec Qt Creator 2.0.1 et Matlab R2010b.
La dernière sortie du compilateur juste au cas où il est utile:
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug/MainUI.exe debug/main.o debug/maingui.o debug/matparser.o debug/matutils.o debug/moc_maingui.o -L'c:/Qt/2010.05/qt/lib' -lmingw32 -lqtmaind "-LC:\Program Files\MATLAB\R2010b\extern\lib\win32\microsoft" -llibmat -lQtGuid4 -lQtCored4
La solution
Je viens de tester la construction d'un programme simple C qui utilise le Interface MAT-File Library sans problème. Le fichier exemple est situé dans: matlabroot/examples/eng_mat/matcreat.c
. Je compile en utilisant MinGW sur une machine 32 bits de Windows XP. Voici le Makefile je:
# root directory of MATLAB installation
MATLABROOT="/c/Program Files/MATLAB/R2010b"
.PHONY : all clean run
all: matcreat
matcreat:
gcc ${MATLABROOT}/extern/examples/eng_mat/matcreat.c -o matcreat \
-I${MATLABROOT}/extern/include \
-L${MATLABROOT}/extern/lib/win32/microsoft -llibmat -llibmx
clean:
rm -rf matcreat *.exe *.mat
run:
# UNIX uses LD_LIBRARY_PATH to find libs at runtime, Windows/MinGW uses PATH
@PATH=${MATLABROOT}/bin/win32:"${PATH}" ./matcreat
Autres conseils
Je soupçonne que la bibliothèque Matlab aura été compilé avec MSVC et puisque vous dites que vous compilez votre propre code avec MingW j'imagine les deux sont incompatibles.
Jetez un oeil à la page MingW sur le mélange des compilateurs pour plus d'informations.