在 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++ 编译器的主要内容,如果未能解决你的问题,请参考以下文章

怎么用c语言实现matlab中的功能?

Matlab 2017a 无法识别编译器(使用 mex 时出错,未找到支持的编译器或 SDK)

gcc编译器对宽字符的识别

VC++学习- 空格说明

为什么安装了MinGW之后,还是不能在Matlab中使用mex?

C/C++程序通过动态链接库调用MATLAB程序