VisualStudio配置与Matlab混合编译问题总结

VisualStudio配置与Matlab混合编译问题总结

写这篇博客记录一下自己在配置过程中遇到的种种问题,也做一个小小总结,试图把整个过程讲明白,希望对面临同样问题的人有所帮助。网上此类教程很多,最好是能有个引导,出现什么问题应该看什么,怎么看。

一.适用情况

个人是编写C++程序中(MFC程序)需要用到Matlab用于绘图和Matlab中的一些计算操作,因此通过如下引擎调用Matlab。配置版本为VS2022与Matlab2017a。

#include "engine.h"

二.过程中遇到的问题-Matlab

1.版本不适配

如何看自己的matlab是否支持VS版本?

参考这位博主:(3条消息) 低版本Matlab(2020b)与高版本Visual Studio(VS2022)实现M、C/C++混合编程(调试)_matlab与vs混合编程_读书人不偷东西的噢!的博客-CSDN博客

我遇到的问题主要是低版本的matlab不支持高版本的VS,因此需要进行配置版本文件的修改。

在matlab的Command Window中输入

mex -setup

在输入命令后,Matlab询问选择时选C++,完成matlab编译器设置,自此Matlab问题解决。

(其实Matlab是没怎么遇到问题的,主要还是VS)

三.过程中遇到的问题-VisualStudio

1.项目属性修改

打开项目-属性,进行属性配置,主要是添加一些Matlab环境以便混合编译。

这里附上我的属性配置(不同的版本和安装时的设置,可能会导致路径上有细微差别,我记得我配置时大体上是可以对上的)。

在这里插入图片描述

在这里插入图片描述

要注意的是,无法正常运行也有可能是预处理器定义这里出现问题,比如是console程序还是windows等等,需要分清。以及程序到底是用的win32还是x64也要知道,不然也许会出错。
在这里插入图片描述

重启生效,预备工作做完,具体不赘述。

2.遇到的问题
在这里插入图片描述

在这里插入图片描述

诸如此类,这是表明需要的动态链接库找不到(还有icuio44.dll、icudt44.dll等等)。

最开始想到的是缺什么库就补什么,直接在网站上对应下载,然后装进matlab对应的dll所在的路径。注意,网上内容质量参差不齐,最好自己记录下都安了什么进去,别稀里糊涂到最后想删都不知道删哪个。

对应的应该是XXXX/Matlab2017a/bin/win64(以我的举例)


题外话:这里注意,有很多教程直接说装在系统文件夹下,如

WIndows/System32文件夹对应64位的dll文件

sysWOW64文件夹对应32位的dll文件等等

个人觉得是很容易弄错的,而且网上资料繁杂,也很难说你下载的到底是32位还是64位的dll。(如果不得已要试试这种方法:详见这位大佬(3条消息) 如何判断一个dll/exe是32位还是64位?(两种方法)_怎么知道dll是32位_c#上位机的博客-CSDN博客

这里是不推荐的,因为系统里的东西其实还是最好不要动,牵涉广泛,没准哪天用别的东西,就因为你系统文件夹里东西删删减减而用不了了,又要解决新问题,多一事不如少一事。


接着上面讲:

如果还不行,尝试这位博主的:

(3条消息) 提示找不到libmat.dll文件的解决方法_LeonSUST的博客-CSDN博客

添加系统的环境变量,进行尝试。

对于我个人的情况,是没有用这一步的。安装上对应的库之后,情况变成了

应用程序无法正常启动(0xc000007b)

很明显上面的问题是治标不治本的,还是dll的依赖没有处理好,处理到现在也很焦头烂额了。也尝试了用directX修复,强力修复等等,不建议一开始使用修复,很大程度上不是修复的问题,而是库的调用上没有处理好

四.如何定位混合编译中VisualStudio出现的问题

建议,如果是有可以编译运行的程序而不是直接是可执行文件exe的话试着编译一下,参看:

(3条消息) VS(Visual Studio)应用程序无法正常启动(0xc000007b)解决办法大全_vs打不开_城市灬边缘的博客-CSDN博客

这位博主。调试运行库,让VS进行提示(具体是:点击“本地Windows调试器”,仔细看输出窗口的文件路径),我发现有个库加载了很多次,每次都卡在那里,然后就出bug。需要进行dll替换。

因此合理推断,也许是dll库本身出现了问题,需要进行替换

注意,如果真是这一步出现了问题,它提示哪个dll库有问题,率先查是否不存在这个库,或者存在这个库,但内容可能不对。这时就最好不要乱从网上下载了。我是在Matlab中找到了对应的库(或者在VS的dll里翻翻),把对应的库直接替换进去。

这样应该就没问题了。

五.成功编译运行后,如何测试engine引擎是否可用

测试代码详见:

(3条消息) C++通过engine引擎调用matlab_山有木兮°的博客-CSDN博客

应该是可以直接运行成功,不需要进行任何修改。

引用了上面几位博主的内容,对遇到的问题进行梳理,回忆了自己测试时的流程。

matlab在关联编译器的时候 会出现找不到编译器的问题 原因是matlab要找windows sdk的mt exe 本文件修改方法也是根据wiills的那篇“matlab找不到编译器的问题”(matlab无法找到vs2012)的修改方法进行的 请参考:http: download csdn net download wiills 4621079 本次修改如下说明: 1 本次为:Matlab版本为Matlab 2013b(64bit版本)无法关联visual studio 2013编译器的解决方法 2 相对于wiills的修改来说 使用读注册表的方法(不删除添加任何语句 只是修改) 而不是使用绝对路径给出地址 理论上讲如果VS2013的安装路径不是默认的 只要版本对的话把这些文件添加进相对性的目录也是可以关联的 3 使用方法 复制wiills的说明了 哈哈 : 1 把附件相关的5个文件添加matlab bin win64下面的2个相关目录 2 在matlab 里面运行 mbuild setup 然后选 y 再选择2013的那个项目 再选y 3 这是应该成功了 4 mex setup也是一样的 如果是Matlab 2013b 32位版本的可以复制出matlab bin win64两个相关目录下(mexopts目录下的:msvc110opts stp msvc110opts bat msvc110engmatopts bat和mbuildopts目录下的:msvc110compp bat msvc110compp stp)这五个文件 VS2012的支持文件 对照本文下面给出方法自行修改即可 ">matlab在关联编译器的时候 会出现找不到编译器的问题 原因是matlab要找windows sdk的mt exe 本文件修改方法也是根据wiills的那篇“matlab找不到编译器的问题”(matlab无法找到vs2012)的修改方法进行的 请参考:http: download csdn net downlo [更多]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值