【Matlab】Matlab2016a+VS2015之间mex过程出错的解决方法

10 篇文章 0 订阅
2 篇文章 0 订阅

配置:win10+64位+matlab16a+VS15
最近在win10系统下,装好了matlab2016和vs2015,由于工作需要对matlab2016进行mex。本以为装好了vs2015,mex的过程应该会很顺利,但是没想到却提示未找到支持的编译器或SDK,如下所示:
这里写图片描述
在网上搜索了一些解决方法,大多数说是安装提示中说的MinGW-w64 编译器就可以了,毕竟只是matlab找不到编译器而已,也没有指定一定要用vs2015来进行编译。但是鉴于已经安装过vs2015了,就不太想安装别的编译器了。于是决定开始找找原因,到底为什么matlab识别不了vs2015。

  • 在matlab中输入以下命令,就可以检查matlab进行mex的过程。
mex -setup -v
  • 在vs2015部分的检查结果如下所示:
... 正在查找编译器 'Microsoft Visual C++ 2015 Professional (C)'...
... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 14.0...是('D:\ProgramFiles\Microsoft Visual Studio 14.0\')。
... 正在查找文件 'D:\ProgramFiles\Microsoft Visual Studio 14.0\VC\bin\amd64\cl.exe'...否。
找不到已安装的编译器 'Microsoft Visual C++ 2015 Professional (C)'。
  • 和正确编译的结果对比以下可以发现,找不到文件 ‘D:\ProgramFiles\Microsoft Visual Studio 14.0\VC\bin\amd64\cl.exe’,所以系统提示找不到安装好的vs2015编译器。修正。。。
    - 补充: 如何解决cl.exe这个问题,可以在网上搜索一下类似的问题。如vs解决 cl.exe 找不到的问题,一般是在安装vs的时候没有勾选C++选项,重新setup修复一下就可以。
... 正在查找编译器 'Microsoft Visual C++ 2015 Professional (C)'...
... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 14.0...是('D:\ProgramFiles\Microsoft Visual Studio 14.0\')。
... 正在查找文件 'D:\ProgramFiles\Microsoft Visual Studio 14.0\VC\bin\amd64\cl.exe'...是。
... 正在查找文件夹 'D:\ProgramFiles\Microsoft Visual Studio 14.0\VC'...是。
... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.1' InstallationFolder...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.1' InstallationFolder...否。
... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.1' InstallationFolder...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.1' InstallationFolder...否。
找不到已安装的编译器 'Microsoft Visual C++ 2015 Professional (C)'。
  • 继续检查,发现提示没有安装SDK 8.1版本。安装。。。
    - 补充: 提示没有找到SDK8.1的话,按照要求重新安装一下。
... 正在查找编译器 'Microsoft Visual C++ 2015 Professional (C)'...
... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 14.0...是('D:\ProgramFiles\Microsoft Visual Studio 14.0\')。
... 正在查找文件 'D:\ProgramFiles\Microsoft Visual Studio 14.0\VC\bin\amd64\cl.exe'...是。
... 正在查找文件夹 'D:\ProgramFiles\Microsoft Visual Studio 14.0\VC'...是。
... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.1' InstallationFolder...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.1' InstallationFolder...否。
... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.1' InstallationFolder...是('C:\Program Files (x86)\Windows Kits\8.1\')。
... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 14.0...是('D:\ProgramFiles\Microsoft Visual Studio 14.0\')。
... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VC7' 14.0...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VC7' 14.0...否。
... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VC7' 14.0...是('D:\ProgramFiles\Microsoft Visual Studio 14.0\VC\')。
... 正在查找环境变量 'VS140COMNTOOLS'...是('D:\ProgramFiles\Microsoft Visual Studio 14.0\Common7\Tools\')。
... 正在查找文件 'D:\ProgramFiles\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe'...是。
... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 14.0...是('D:\ProgramFiles\Microsoft Visual Studio 14.0\')。
... 正在查找文件 'D:\ProgramFiles\Microsoft Visual Studio 14.0\VC\vcvarsall.bat'...否。
找不到已安装的编译器 'Microsoft Visual C++ 2015 Professional (C)'。
  • VC目录下没有vcvarsall.bat文件。修正。。。
    检查到这里,感觉是自己VC貌似没有装好,缺失了很多文件。
    - 补充: 提示VC目录下没有vcvarsall.bat文件,通过网上搜索发现,vcvarsall.bat 好像是用来设置生成编译环境的,缺失这个文件最大的原因应该是没有正确安装visual studio c++,可以重新安装一下。或者拷贝一个相同版本的vcvarsall.bat文件放在指定路径下试试。
... 正在查找编译器 'Microsoft Visual C++ 2015 Professional (C)'...
... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 14.0...是('D:\ProgramFiles\Microsoft Visual Studio 14.0\')。
... 正在查找文件 'D:\ProgramFiles\Microsoft Visual Studio 14.0\VC\bin\amd64\cl.exe'...是。
... 正在查找文件夹 'D:\ProgramFiles\Microsoft Visual Studio 14.0\VC'...是。
... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.1' InstallationFolder...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.1' InstallationFolder...否。
... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.1' InstallationFolder...是('C:\Program Files (x86)\Windows Kits\8.1\')。
... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 14.0...是('D:\ProgramFiles\Microsoft Visual Studio 14.0\')。
... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VC7' 14.0...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VC7' 14.0...否。
... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VC7' 14.0...是('D:\ProgramFiles\Microsoft Visual Studio 14.0\VC\')。
... 正在查找环境变量 'VS140COMNTOOLS'...是('D:\ProgramFiles\Microsoft Visual Studio 14.0\Common7\Tools\')。
... 正在查找文件 'D:\ProgramFiles\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe'...是。
... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 14.0...是('D:\ProgramFiles\Microsoft Visual Studio 14.0\')。
... 正在查找文件 'D:\ProgramFiles\Microsoft Visual Studio 14.0\VC\vcvarsall.bat'...是。
... 正在查找文件夹 'D:\ProgramFiles\Microsoft Visual Studio 14.0\VC'...是。
... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\Windows Kits\Installed Roots' KitsRoot10...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\Windows Kits\Installed Roots' KitsRoot10...否。
... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows Kits\Installed Roots' KitsRoot10...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Wow6432Node\Microsoft\Windows Kits\Installed Roots' KitsRoot10...否。
找不到已安装的编译器 'Microsoft Visual C++ 2015 Professional (C)'。
  • 提示没有安装SDK 10版本。安装。。。
    - 补充: 提示没有找到SDK10,继续安装。
... 正在查找编译器 'Microsoft Visual C++ 2015 Professional (C)'...
... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 14.0...是('D:\ProgramFiles\Microsoft Visual Studio 14.0\')。
... 正在查找文件 'D:\ProgramFiles\Microsoft Visual Studio 14.0\VC\bin\amd64\cl.exe'...是。
... 正在查找文件夹 'D:\ProgramFiles\Microsoft Visual Studio 14.0\VC'...是。
... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.1' InstallationFolder...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.1' InstallationFolder...否。
... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.1' InstallationFolder...是('C:\Program Files (x86)\Windows Kits\8.1\')。
... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 14.0...是('D:\ProgramFiles\Microsoft Visual Studio 14.0\')。
... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VC7' 14.0...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VC7' 14.0...否。
... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VC7' 14.0...是('D:\ProgramFiles\Microsoft Visual Studio 14.0\VC\')。
... 正在查找环境变量 'VS140COMNTOOLS'...是('D:\ProgramFiles\Microsoft Visual Studio 14.0\Common7\Tools\')。
... 正在查找文件 'D:\ProgramFiles\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe'...是。
... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。
... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 14.0...是('D:\ProgramFiles\Microsoft Visual Studio 14.0\')。
... 正在查找文件 'D:\ProgramFiles\Microsoft Visual Studio 14.0\VC\vcvarsall.bat'...是。
... 正在查找文件夹 'D:\ProgramFiles\Microsoft Visual Studio 14.0\VC'...是。
... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\Windows Kits\Installed Roots' KitsRoot10...是('C:\Program Files (x86)\Windows Kits\10\')。
找到已安装的编译器 'Microsoft Visual C++ 2015 Professional (C)'。

在各种查缺补漏后,matlab终于和VS2015相认了。

- 2019年3月12日补充: 从上面的步骤可以看出,matlab在和VS2015进行mex的过程中,可能是需要两个软件中各种文件的相互配合。在这个配合查找过程中,少了任意一个关键文件或软件,都是造成mex失败。每个人mex失败的原因可能都不一样,通过‘mex -setup -v’命令,就可以清楚的看到自己mex失败的原因,然后对症下药,解决问题。

此时再输入mex命令,就可以成功编译了。
这里写图片描述


UPDATE

记录下后续接着折腾的过程。

  • 上面虽然已经成功让matlab找到了VS2015,但是由于自己的VS2015貌似没有安装完全,后面进行实际编译的时候还是报错了。
  • 于是又重新安装了VS2013(顺带把15卸载了),这次很顺利的将matlab和VS2013链接上了,也成功运行编译了mex XX.cpp。此时系统默认的编译器就是VS2013了。
  • 接着跑别的程序时发现不支持13版本的VS,只好再来安装15,漫长的等待后,这次也没有报之前的错误,顺利编译。(所以感觉出错的原因应该是自己的VS没有装好)
  • 但是接下来再进行测试的时候,却出现了这样的问题,matlab还是傻傻的在找VS2013的编译器。
    这里写图片描述
  • 但其实这里已经将matlab默认的编译器设置成VS2015了,且为了彻底让matlab失去和VS2013的关联,我还把13又卸载了。重启matlab,重启电脑,都没有用,matlab就是不去找前面设置好的VS2015。
  • 所以最后只好用最笨的方法,那就是重装matlab。

至此,win10下的matlab2016a+VS2015算是成功编译了。

  • 就自己的经验,正常安装好matlab和VS的话,一般mex -setup都是很顺利的。
  • 如果出错了就用mex -setup -v命令看看matlab在查找编译器的时候是VS的什么文件没有找到,进行相应的查缺补漏。
  • 如果还是不行的话,重装matlab或者VS应该就可以解决问题了。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值