我通过编译我用*.dll
运行时编译器在MATLAB中开发的应用程序生成了动态链接库文件。我正在使用Qt环境中的MSVC编译器和qmake工具集来分发和/或使用我在Windows OS环境下用MATLAB开发的应用程序中的过程。但是我在添加动态链接库(例如mclmcrrt.lib
、libmx.lib
、libmex.lib
、libmat.lib
、libfixedpoint.lib
等)时遇到了困难。由MATLAB运行时编译器与我的项目共享。当我在Qt环境中构建项目时,我会得到以下错误:
* LNK1104: cannot open file 'mclmcrrtd.lib'
* U1077: "\VS\Tools\MSVC\{Version}\bin\HostX86\x64\link.EXE": return code '0x450'
* U1077: "\VS\Tools\MSVC\{Version}\bin\HostX86\x64\nmake.exe": return code '0x2'
我该如何解决这个问题?
发布于 2021-12-17 07:20:02
1.错误的定义
我通过启动一个类似的项目来测试这个bug。当我在Qt创造者中编译项目时,我得到了以下错误:
LNK1104:无法打开文件“mclmcrrtd.lib”
2.纠正错误的步骤
按照以下步骤解决问题:
Add Library > External Library
,我添加了一个动态库。我在QT Creator中的外部库窗口中使用了以下设置,使用这些设置添加了文件和目录: * Linkage: Dynamic
* Mac: Library
* [✔] Library inside "debug" or "release" subfolder
* [ ] Add "d" suffix for debug version
* [ ] Remove "d" suffix for release version
~/lib/win64/
目录中选择了~/lib/win64/
文件,并在Qt Creator上的外部库窗口中单击了Next按钮。我看到mclmcrrt.lib
库在Win32、Win64和Unix系统中以这种方式导入到Qt Creator (比如lmclmcrrt
、lmclmcrrtd
、lmclmcrrt
)中有不同的名称。win32:CONFIG(release, debug|release): LIBS += -L$$PWD/'../../../../Program Files/MATLAB/R2018B/extern/lib/win64/microsoft/' -lmclmcrrt
else:win32:CONFIG(release, debug|release): LIBS += -L$$PWD/'../../../../Program Files/MATLAB/R2018B/extern/lib/win64/microsoft/' -lmclmcrrtd
else:unix: LIBS += -L$$PWD/'../../../../Program Files/MATLAB/R2018B/extern/lib/win64/microsoft/' -lmclmcrrt
INCLUDEPATH += $$PWD/'../../../../Program Files/MATLAB/R2018B/extern/lib/win64/microsoft'
DEPENDPATH += $$PWD/'../../../../Program Files/MATLAB/R2018B/extern/lib/win64/microsoft'
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/'../../../../Program Files/MATLAB/R2018B/extern/lib/win64/microsoft/' -lmclmcrrt
else:win32:CONFIG(release, debug|release): LIBS += -L$$PWD/'../../../../Program Files/MATLAB/R2018B/extern/lib/win64/microsoft/' -lmclmcrrtd
else:unix: LIBS += -L$$PWD/'../../../../Program Files/MATLAB/R2018B/extern/lib/win64/microsoft/' -lmclmcrrt
INCLUDEPATH += $$PWD/'../../../../Program Files/MATLAB/R2018B/extern/include'
INCLUDEPATH += $$PWD/'../../../../Program Files/MATLAB/R2018B/extern/include/win64'
INCLUDEPATH += $$PWD/'../../../../Program Files/MATLAB/R2018B/extern/lib/win64/microsoft'
DEPENDPATH += $$PWD/'../../../../Program Files/MATLAB/R2018B/extern/lib/win64/microsoft'
Build > Rebuild All Projects
命令在Qt 中编译项目时,我再次得到了错误LNK1104: Cannot open file 'mclmcrrtd.lib'
。我发现这是因为旧的MATLAB编译运行时(MCR)只适用于x86体系结构。出于这个原因,我发现互联网上的许多示例项目都使用了win32
标记在*.pro文件中的描述中。但是,我认为使用win32
标记是不正确的,因为从当前MSVC的C:\Program Files(x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\{Version}\bin\HostX64\x64\cl.exe
目录调用短语HostX64\x64
是不正确的。包含相关代码块的*.pro文件中的最终配置如下所示并成功LIBS += -L$$PWD/'../../../../Program Files/MATLAB/R2018B/extern/lib/win64/microsoft/' -lmclmcrrt
INCLUDEPATH += $$PWD/'../../../../Program Files/MATLAB/R2018B/extern/include'
INCLUDEPATH += $$PWD/'../../../../Program Files/MATLAB/R2018B/extern/include/win64'
INCLUDEPATH += $$PWD/'../../../../Program Files/MATLAB/R2018B/extern/lib/win64/microsoft'
DEPENDPATH += $$PWD/'../../../../Program Files/MATLAB/R2018B/extern/lib/win64/microsoft'
3.资源
https://stackoverflow.com/questions/70389630
复制相似问题