在 MATLAB 中识别 VC++ 编译器
Posted
技术标签:
【中文标题】在 MATLAB 中识别 VC++ 编译器【英文标题】:Recognizing VC++ compiler in MATLAB 【发布时间】:2019-10-16 16:32:11 【问题描述】:为了安装 MatConvNet,需要使用 C++ 编译器。由于 MingW-w64 C++ 不起作用,应该使用 Visual C++ 编译器。但是,我遇到了一些问题。 尽管它们都已安装,但我无法使用它们。 使用 Mingw 编译器,安装过程会失败,无法识别 VC++。我安装了Visual Studio 2017,但是当发出以下命令时,似乎无法识别。
>> mex.getCompilerConfigurations('C++','Selected')
输出:
ans =
CompilerConfiguration with properties:
Name: 'MinGW64 Compiler (C++)'
Manufacturer: 'GNU'
Language: 'C++'
Version: '4.x'
Location: '$MINGWROOT'
ShortName: 'mingw64-g++'
Priority: 'E'
Details: [1×1 mex.CompilerConfigurationDetails]
LinkerName: '$MINGWROOT\bin\g++'
LinkerVersion: ''
MexOpt: some path
那么,问题是如何让 MATLAB 将 VC++ 识别为主编译器?
附:两个编译器都位于 MATLAB 的 mexopts 目录中。
【问题讨论】:
您是否按照文档中的说明尝试过mex -setup
?它应该允许您选择编译器。另外,您使用哪个版本的 MATLAB?每个版本只能识别一组有限的 MSVC 版本。见这里:mathworks.com/help/matlab/matlab_external/…
使用 mex -setup 命令将引发以下错误 '' Error using mex No supported compiler or SDK was found.您可以安装免费提供的 MinGW-w64 C/C++ 编译器;请参阅安装 MinGW-w64 编译器。有关更多选项,请访问 mathworks.com/support/compilers/R2017a。'' 但是,使用 MingW 的 setenv() 一切正常。问题是如何为 VC++ 做到这一点。
你安装编译器了吗?上次安装时,Visual Studio的默认安装集没有包含C/C++编译器。
确保检查@Daniel 提到的内容。 MVS 默认不安装 C++ 编译器!因此,除非您在安装过程中明确选择它,否则您可能没有安装 MVS。不,编译器不驻留在mexopts
目录中,这纯粹是带有编译器选项的xml
文件
@Daniel,我安装了编译器,但它不起作用。
【参考方案1】:
选择 C++ 编译器的documented way 是使用mex -setup c++
。但是,如果由于某种原因这不起作用(就像 OP 的情况一样),那么可以手动配置编译器:
在mex.getCompilerConfigurations('C++','Selected')
的输出中,有一个MexOpt
值。这指向包含mex
将使用的所选编译器信息的文件。
您可以获取mexopts
目录(可在此处找到:$MATLABROOT/bin/<arch>/mexopts
)中的任何 XML 文件,然后复制并重命名它以匹配 mex.getCompilerConfigurations('C++').MexOpt
的值。
根据您的平台(我没有看到这在 Windows 下是什么样子),您可能需要编辑一些指向编译器和相关目录的路径。
建议您配置的 C 和 C++ 编译器匹配。
【讨论】:
重命名技巧奏效了,但我仍然收到之前的错误:“未找到支持的编译器或 SDK。”此外,mex - setup 命令不再起作用,它会产生上述错误。 @dtr43:啊,这就解释了。您可以将其发布为答案吗?它可能会帮助遇到同样问题的其他人。 感谢您的无价帮助和建议。当然,我会发布它!【参考方案2】:不幸的是,作为答案和 cmets 提供的所有方法都不起作用。我刚刚发现这是 MATLAB R2016b 和 R2017a 中的一个错误。 可以在以下链接中找到此问题的解决方法。
mathworks.com/support/bugreports/1487958
【讨论】:
以上是关于在 MATLAB 中识别 VC++ 编译器的主要内容,如果未能解决你的问题,请参考以下文章
Matlab 2017a 无法识别编译器(使用 mex 时出错,未找到支持的编译器或 SDK)