如何让 MatLab 找到 Visual C++ 编译器?
Posted
技术标签:
【中文标题】如何让 MatLab 找到 Visual C++ 编译器?【英文标题】:How can I get MatLab to find the Visual C++ Compiler? 【发布时间】:2016-02-25 05:14:13 【问题描述】:序言:我在写这篇文章的过程中找到了一个解决方案,这个问题是一个 PITA,并且有一个复杂的解决方案。因此,我觉得有必要把它留在这里,以帮助任何有这个问题的可怜人。
我是 MatLab 的新手,而且我通常也不使用 Visual C++,所以如果这很明显,请原谅我。
短版:我的计算机上安装了 Visual C++ 2013,但是当我运行 mex -setup c++
时,mex 找不到它。我得到以下信息:
>>mex -setup cxx
使用 mex 时出错
未找到支持的编译器或 SDK。您可以安装免费提供的 MinGW-w64 C/C++ 编译器;请参阅安装 MinGW-w64 编译器。有关更多选项,请参阅 http://www.mathworks.com/support/compilers/R2015b/win64.html.
这是完整的情况。
操作系统:Windows 10 家庭版 编译器:Visual Studio 2013(v120,最新) 我确认我可以使用此工具集编译和运行程序。 MatLab 版本:2015b我最初运行的是 Visual Studio 2015,mex 发现编译器很好。然而,我很快发现 Simulink 与 VS 2015 不兼容,所以我不得不回滚到 VS 2013,这就是我的问题开始的时候。
我已经尝试过以下网站来寻找解决方案:
The MatLab mex documentation - 没有帮助,只显示基本的mex
用法。
The MatLab supported compiler list - 确认 VC++ 2013 兼容。
然后我掉进了一个兔子洞。
A very protracted mathworks.com answer that suggested other links。这让我...
Another mathworks.com answer 这听起来像是我的问题,并建议修补我的设置。原来我没有安装 SDK 7.1。所以,我去安装,得到了这个错误:
无法安装某些组件。一些 Windows SDK 组件需要 RTM .NET Framework 4...
This Stack Overflow question 询问了这个问题,我遇到了与Danilo Gadêlha 完全相同的问题,即已经安装了 .NET Framework。
我尝试了top answer,在删除了对我能找到的任何 版本的.NET 框架的所有引用后,包括“Windows 功能”下的那些,我仍然无法安装。
我尝试了next option,即使在安全模式下,RegEdit 也不允许我更改下一个答案建议的值,所以这是失败的。
最后,我尝试了MandM's solution,终于解决了我的一连串问题。
【问题讨论】:
【参考方案1】:我认为这是我的问题的根源:当我卸载 Visual Studio 2015 并安装 Visual Studio 2013 时,安装或注册表设置处于不正确的状态,结果 mex 无法找到 Visual Studio 2013。
对我有用的解决方案:
-
保持安装 Visual Studio 2013。
As MandM answered:
卸载以下内容:
“Microsoft Visual C++ 2010 x64 Redistributable” “Microsoft Visual C++ 2010 x86 Redistributable”在安装 Windows 7.1 SDK 之前,安装包会在安装过程中重新安装这两个。
正如Robert Važan 在 cmets 中指出的那样:
如果尽管采用了这种解决方法,错误消息仍然存在,只需单击“确定”并继续安装。这次会安装成功..
我确实收到了这个错误,但安装工作正常。
安装SDK 7.1 Patch,它修复了this mathworks.com answer 上突出显示的问题。【讨论】:
听起来你为这么简单的事情经历了很多麻烦。 Visual Studio 支持并行安装,因此您可以同时安装多个版本而不会出现任何问题。也没有必要搞乱 SDK,VS 安装了完整的编译器集。过去,在没有 Visual Studio 的情况下,您只需要 Win SDK(可免费下载)。当然,现在 VS2013/VS2015 有一个“社区版”,可以免费使用,并且包含专业版的全部功能。 @Amro:不幸的是,不能使用社区版在 MATLAB 中编译代码。 @JLagana 真的吗?从技术上讲,您没有理由不能(社区版实际上等同于专业版)。我想手动修改prefdir
中的 mex XML 配置文件以检测 VS 社区版本并不难。我过去曾这样做过添加当时不受官方支持的英特尔编译器版本:gist.github.com/amroamroamro/414abe0b2a6002cd8945。您可以将$matlabroot\bin\$arch\mexopts
中的msvcpp2015.xml
作为社区版的起点,将修改后的保存为$prefdir\mex_C++_$arch.xml
@Amro:我的意思是,社区版不受官方支持。确实可能有解决方法。以上是关于如何让 MatLab 找到 Visual C++ 编译器?的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 2010 (C++) 中集成 MATLAB 代码
visual c++中如何用CreateWindow函数创建状态栏
如何让 Visual Studio 2013 不停止错误生成 (C++)
如何在 Visual Studio (C++) 中找到应用程序的入口点