【问题标题】:Linking Matlab shared library into Qt (Windows)将 Matlab 共享库链接到 Qt (Windows)
【发布时间】:2011-06-11 17:03:11
【问题描述】:

我想在 Windows 下的 QT (http://www.mathworks.com/help/techdoc/matlab_external/f39876.html#bsfvqhp-1) 中使用 Matlab 的 C API 打开 .mat 文件。在我的 .pro 文件中,我已包含 INCLUDEPATH += "C:\Program Files\MATLAB\R2010b\extern\include" 工作正常(代码编译)。但是当试图链接 libmat.lib 文件(我已经阅读 .dll 文件不能直接链接)使用 LIBS += -L"C:\Program Files\MATLAB\R2010b\extern\lib\win32\microsoft" -llibmat 应用程序在执行时崩溃。给出的错误是[file].exe exited with code -1073741515

我既不是 QT 也不是 Windows 专家,但对于这个项目,我不得不同时使用两者(我想在 GNU/Linux 中修复这个问题会更容易),因此我们将不胜感激。使用 Windows XP、QT 4.7.0 版、Qt Creator 2.0.1 和 Matlab R2010b。

编译器的最后输出以防万一有用:

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

【问题讨论】:

  • 您使用的是哪个编译器,您知道使用哪个编译器构建 Matlab 库吗?另外,您能否详细说明您说“已读取无法直接链接的 .dll 文件”时的意思?
  • 嗨。我不确定 QT 在 Windows 中使用哪个编译器(我猜是 win32-g++,因为构建系统是 mingw32-make),而且我不知道用于构建 Matlab 库的编译器。当我说 DLL 文件不能直接链接时,我的意思是应该在配置文件 (.pro) 中使用 .lib 文件。
  • 好的,谢谢。我明白你现在关于直接链接的意思。我添加了一个答案,表明可能是什么问题。

标签: qt matlab windows-xp .lib


【解决方案1】:

我刚刚测试了构建一个使用MAT-File Interface Library 没有问题的简单C 程序。示例文件位于:matlabroot/examples/eng_mat/matcreat.c。我在 Windows XP 32 位机器上使用 MinGW 进行编译。这是我使用的 Makefile:

# 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

【讨论】:

  • 嗨。感谢那。我无法尝试您的代码,因为我完全放弃了 Matlab 解决方案,转而支持创建和解析我自己的二进制格式。如果有人可以尝试,请给 Amro 投赞成票。
【解决方案2】:

我怀疑 Matlab 库是用 MSVC 编译的,既然你说你是用 MingW 编译你自己的代码,我想这两者是不兼容的。

查看the MingW page on mixing compilers 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多