Linking Matlab gemeinsam genutzte Bibliothek in Qt (Windows)
-
12-10-2019 - |
Frage
Ich möchte zum Öffnen einer Datei .mat Matlab C API innerhalb QT (http://www.mathworks.com/help/techdoc/matlab_external/f39876.html#bsfvqhp-1) unter Windows verwenden. In meiner .proDatei habe ich eingeschlossen
INCLUDEPATH += "C:\Program Files\MATLAB\R2010b\extern\include"
das funktioniert gut (der Code kompiliert). Aber wenn man versucht, die libmat.lib Datei zu verknüpfen (ich habe die DLL-Dateien lesen können nicht direkt verknüpft werden) unter Verwendung von
LIBS += -L"C:\Program Files\MATLAB\R2010b\extern\lib\win32\microsoft" -llibmat
stürzt die Anwendung bei der Ausführung. Der Fehler gegeben, sagt [file].exe exited with code -1073741515
Ich bin weder ein QT noch ein Windows-Experte aber für dieses Projekt ist ich beide zu verwenden gezwungen (Ich denke, es wäre einfacher, dies zu beheben in GNU / Linux) so dass jede Hilfe würde geschätzt. Mit Windows XP, QT-Version 4.7.0 mit Qt Creator 2.0.1 und Matlab R2010b.
Die letzte Ausgabe des Compilers für alle Fälle ist es sinnvoll:
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
Lösung
Ich habe gerade getestet, ein einfaches C-Programm aufzubauen, die die MAT-File Interface Library . Die Beispieldatei befindet sich in: matlabroot/examples/eng_mat/matcreat.c
. Ich bin mit der Zusammenstellung MinGW auf einem Windows XP 32-Bit-Rechner. Hier ist die Makefile I verwendet:
# 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
Andere Tipps
Ich vermute, dass die Matlab-Bibliothek wird mit MSVC kompiliert wurden und da Sie sagen, dass Sie Ihren eigenen Code mit MingW ich kompilieren könnte mir vorstellen, die beiden sind nicht kompatibel.
Hier finden Sie aktuelle die MingW Seite auf Misch Compiler für weitere Informationen .