1、确定一下您的问题:错误使用Mex
2、再执行以下命令:
如果您的结果跟我一样,那么可以继续看,如果不一样,就可能不是同一个问题。
下面直接说解决方案:
3、打开powershell,执行下面命令
install-module -scope currentuser MSI
install-module -scope currentuser MSI
按照提示输入Y
4、继续执行命令
get-msirelatedproductinfo ‘{1571205C-BAD1-4237-BFE6-B77E622C51DB}’
get-msirelatedproductinfo '{1571205C-BAD1-4237-BFE6-B77E622C51DB}'
很有可能该命令会出错
该错误是因为禁用了脚本执行的权限,需要再执行允许执行脚本权限即可
5、出现上面错误时执行命令,否则跳过
set-ExecutionPolicy RemoteSigned
set-ExecutionPolicy RemoteSigned
这时,再执行上面的命令就可以正常执行了。
6、继续执行命令
get-msirelatedproductinfo ‘{1571205C-BAD1-4237-BFE6-B77E622C51DB}’ | repair-msiproduct
get-msirelatedproductinfo '{1571205C-BAD1-4237-BFE6-B77E622C51DB}' | repair-msiproduct
执行该命令很有可能还会出错
该错误是因为set configuration出错,
解决方案:下载一个最新的Microsoft.VisualStudio.Setup.Configuration.msi安装就可以了。
或者从vs2019安装文件中搜索“Microsoft.VisualStudio.Setup.Configuration.msi”,并安装就好了。
安装完后,再执行一次出错的命令就会正常了。
7、至此,问题已经解决,测试命令
vswhere.exe
如果输出仍然是第2步的结果,则说明未解决,如果输出如下,则ok
因为该问题,我已经测试了很多种方法,网上基本上就是修改注册表,清理注册表,重装matlab,重装vs都试过了,全都无效,就差重装系统了。也不是安装先后的问题,差点就要放弃了。也测试了TotalUninstaller.zip工具卸载,无效。该问题困扰多天,希望能够帮助后来人不要受到该问题困扰。
====================================================================
下面是第二种解决方案,可以参考
其实修改注册表的办法不是没有效,只是需要根据xml文件内容来更改,如果您的xml文件与我的一样,那么可以尝试通过注册表解决
msvc2019.xml
<?xml version="1.0" encoding="UTF-8" ?>
<config
Name="Microsoft Visual C++ 2019 (C)"
ShortName="MSVC160"
Manufacturer="Microsoft"
Version="16.0"
Language="C"
Priority="A"
Location="$VCROOT\" >
<Details
CompilerExecutable="$COMPILER"
CompilerDefines="$COMPDEFINES"
CompilerFlags="$COMPFLAGS"
OptimizationFlags="$OPTIMFLAGS"
DebugFlags="$DEBUGFLAGS"
IncludeFlags="$INCLUDE"
LinkerExecutable="$LINKER"
LinkerFlags="$LINKFLAGS"
LinkerLibraries="$LINKLIBS"
LinkerDebugFlags="$LINKDEBUGFLAGS"
LinkerOptimizationFlags="$LINKOPTIMFLAGS"
CommandLineShell="$VCVARSALLDIR\VCVARSALL.BAT "
CommandLineShellArg="amd64"
CompilerDefineFormatter="/D%s"
LinkerLibrarySwitchFormatter="lib%s.lib;%s.lib"
LinkerPathFormatter="/LIBPATH:%s"
LibrarySearchPath="$$LIB;$$LIBPATH;$$PATH;$$INCLUDE;$MATLABROOT\extern\lib\$ARCH\microsoft"
/>
<!-- Switch guide: http://msdn.microsoft.com/en-us/library/fwkeyyhe(v=vs.71).aspx -->
<vars
CMDLINE100="$COMPILER /c $COMPFLAGS $OPTIM $COMPDEFINES $INCLUDE $SRC /Fo$OBJ"
CMDLINE200="$LINKER $LINKFLAGS $LINKTYPE $LINKOPTIM $LINKEXPORTVER $OBJS $LINKLIBS /out:$EXE"
CMDLINE250="mt -outputresource:$EXE;2 -manifest $MANIFEST"
CMDLINE300="del $EXP $LIB $MANIFEST $ILK"
COMPILER="cl"
COMPFLAGS="/Zp8 /GR /W3 /EHs /nologo /MD"
COMPDEFINES="/D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 $MATLABMEX"
MATLABMEX=" /DMATLAB_MEX_FILE"
OPTIMFLAGS="/O2 /Oy- /DNDEBUG"
INCLUDE="-I"$MATLABROOT\extern\include" -I"$MATLABROOT\simulink\include""
DEBUGFLAGS="/Z7"
LINKER="link"
LINKFLAGS="/nologo /manifest "
LINKTYPE="/DLL"
LINKEXPORT="/EXPORT:mexFunction"
LINKEXPORTVER="/EXPORT:mexFunction /EXPORT:mexfilerequiredapiversion"
LINKLIBS="/LIBPATH:"$MATLABROOT\extern\lib\$ARCH\microsoft" libmx.lib libmex.lib libmat.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib"
LINKDEBUGFLAGS="/debug /PDB:"$TEMPNAME$LDEXT.pdb""
LINKOPTIMFLAGS=""
OBJEXT=".obj"
LDEXT=".mexw64"
SETENV="set COMPILER=$COMPILER
set COMPFLAGS=/c $COMPFLAGS $COMPDEFINES $MATLABMEX
set OPTIMFLAGS=$OPTIMFLAGS
set DEBUGFLAGS=$DEBUGFLAGS
set LINKER=$LINKER
set LINKFLAGS=$LINKFLAGS /export:%ENTRYPOINT% $LINKTYPE $LINKLIBS $LINKEXPORT
set LINKDEBUGFLAGS=/debug /PDB:"%OUTDIR%%MEX_NAME%$LDEXT.pdb"
set NAME_OUTPUT=/out:"%OUTDIR%%MEX_NAME%%MEX_EXT%""
/>
<client>
<engine
LINKLIBS="$LINKLIBS libeng.lib"
LINKEXPORT=""
LINKEXPORTVER=""
LDEXT=".exe"
LINKTYPE=""
MATLABMEX=""
/>
<mbuild
CMDLINE100="$COMPILER /c $COMPFLAGS $OPTIM $COMPDEFINES $INCLUDE $SRC /Fo$OBJ"
CMDLINE200="$LINKER $LINKFLAGS $LINKTYPE $LINKOPTIM $LINKEXPORT $OBJS $LINKLIBS /out:$EXE"
CMDLINE250="$MTCMDLINE"
CMDLINE300="del $MANIFEST "$TEMPNAME.map" "
LINKFLAGS="/nologo /manifest"
LINKLIBS="/MACHINE:AMD64 /LIBPATH:"$MATLABROOT\extern\lib\$ARCH\microsoft" mclmcrrt.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib"
INCLUDE="-I"$MATLABROOT\extern\include" -I"$MATLABROOT\extern\include\$ARCH""
COMPFLAGS="-MD -Zp8 -GR -W3 -EHsc- -Zc:wchar_t- -nologo"
COMPDEFINES="/DMSVC /DIBMPC /D_CRT_SECURE_NO_DEPRECATE"
OPTIMFLAGS="-O2 -DNDEBUG"
LINKEXPORT=""
LINKEXPORTVER=""
LDEXT=".exe"
MATLABMEX=""
MTCMDLINE="mt -outputresource:$EXE;1 -manifest $MANIFEST"
LINKTYPE=""
LINKDEBUGFLAGS="/debug /PDB:"$TEMPNAME.pdb""
/>
<mbuild_com
CMDLINE000="copy "$MATLABROOT\extern\include\$ARCH\mwcomutil.tlb" ."
CMDLINE001="midl /nologo /$ARCH $COMPINCLUDE /D NDEBUG /out "$OUTDIR" mwcomtypes.idl"
CMDLINE002="midl /nologo /$ARCH $COMPINCLUDE /D NDEBUG /out "$OUTDIR" "$COMIDL""
CMDLINE100="$COMPILER $COMPFLAGS $OPTIM $COMPDEFINES $INCLUDE $COMPINCLUDE $SRC /Fo$OBJ"
CMDLINE150="rc /fo "$RESFILE" "$RCFILE""
CMDLINE250="mt -outputresource:$EXE;2 -manifest $MANIFEST"
CMDLINE275=""$MATLABROOT\runtime\$ARCH\mwregsvr.exe" $EXE"
CMDLINE300="del $MANIFEST mwcomutil.tlb "$RESFILE""
OUTDIR="."
INCLUDE="$INCLUDE -I"$OUTDIR" -I"$MATLABROOT\extern\include\$ARCH""
COMPFLAGS="/c /GR /W3 /EHsc- -Zc:wchar_t /nologo /MT"
COMPDEFINES="/DMSVC /DIBMPC /D_CRT_SECURE_NO_DEPRECATE"
COMPINCLUDE="-I"$MATLABROOT\extern\include""
LINKEXPORT="/DLL /def:"$DEFFILE""
LINKEXPORTVER="/DLL /def:"$DEFFILE""
LINKLIBS="/MACHINE:AMD64 $LINKLIBS mclmcrrt.lib $MCLMAINLIB_MS "$RESFILE""
LDEXT=".dll"
USERONLY=""
LINKTYPE=""
MATLABMEX=""
/>
</client>
<locationFinder>
<VCROOT>
<and>
<or>
<hklmExists path="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hkcuExists path="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hklmExists path="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hkcuExists path="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
</or>
<cmdReturns name="set "vcroot=$$"&for /f "delims= " %a in ('type "$$\VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt"') do @if exist "$$\VC\Tools\MSVC\%a\bin\HostX64\x64\cl.exe" call echo %vcroot%" />
</and>
</VCROOT>
<SDKROOT>
<or>
<hklmExists path="SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0" name="InstallationFolder" />
<hkcuExists path="SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0" name="InstallationFolder" />
<hklmExists path="SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0" name="InstallationFolder" />
<hkcuExists path="SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0" name="InstallationFolder" />
</or>
</SDKROOT>
<VSINSTALLDIR>
<or>
<hklmExists path="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hkcuExists path="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hklmExists path="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hkcuExists path="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
</or>
</VSINSTALLDIR>
<VCINSTALLDIR>
<and>
<or>
<hklmExists path="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hkcuExists path="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hklmExists path="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hkcuExists path="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
</or>
<cmdReturns name="set "vcroot=$$"&for /f "delims= " %a in ('type "$$\VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt"') do @if exist "$$\VC\Tools\MSVC\%a\bin\HostX64\x64\cl.exe" call echo %vcroot%\VC\Tools\MSVC\%a" />
</and>
</VCINSTALLDIR>
<VCVARSALLDIR>
<and>
<or>
<hklmExists path="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hkcuExists path="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hklmExists path="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hkcuExists path="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
</or>
<fileExists name="$$\VC\Auxiliary\Build\vcvarsall.bat" />
<dirExists name="$$"/>
</and>
</VCVARSALLDIR>
<KITSROOT>
<or>
<hklmExists path="SOFTWARE\Wow6432Node\Microsoft\Windows Kits\Installed Roots" name="KitsRoot10" />
<hkcuExists path="SOFTWARE\Wow6432Node\Microsoft\Windows Kits\Installed Roots" name="KitsRoot10" />
<hklmExists path="SOFTWARE\Microsoft\Windows Kits\Installed Roots" name="KitsRoot10" />
<hkcuExists path="SOFTWARE\Microsoft\Windows Kits\Installed Roots" name="KitsRoot10" />
</or>
</KITSROOT>
<SDKVERSION>
<and>
<or>
<hklmExists path="SOFTWARE\Wow6432Node\Microsoft\Windows Kits\Installed Roots" name="KitsRoot10" />
<hkcuExists path="SOFTWARE\Wow6432Node\Microsoft\Windows Kits\Installed Roots" name="KitsRoot10" />
<hklmExists path="SOFTWARE\Microsoft\Windows Kits\Installed Roots" name="KitsRoot10" />
<hkcuExists path="SOFTWARE\Microsoft\Windows Kits\Installed Roots" name="KitsRoot10" />
</or>
<!-- For each folder inside '<KITSROOT>\include' check for 'ucrt' and if exists return that folder name -->
<cmdReturns name="echo off&set "sdkversion="&(for /f %a IN ('dir "$$\include\" /b /ad-h /on') do ( @if exist "$$\include\%a\ucrt\" set "sdkversion=%a" ))&call echo %sdkversion%" />
</and>
</SDKVERSION>
</locationFinder>
<env
PATH="$VCINSTALLDIR\bin\HostX64\x64\;$VCROOT\Common7\IDE\VC\vcpackages;$VCROOT\Common7\IDE;$VCROOT\Common7\Tools;$SDKROOT\Bin\$SDKVERSION\x64;$SDKROOT\Bin\$SDKVERSION\x86;$SDKROOT\Bin\x64;$SDKROOT\Bin\x86;"
INCLUDE="$VCINSTALLDIR\include;$VCINSTALLDIR\atlmfc\include;$KITSROOT\include\$SDKVERSION\ucrt;$KITSROOT\include\$SDKVERSION\shared;$KITSROOT\include\$SDKVERSION\um;$KITSROOT\include\$SDKVERSION\winrt;$MATLABROOT\extern\include"
LIB="$VCINSTALLDIR\lib\x64;$VCINSTALLDIR\atlmfc\lib\x64;$KITSROOT\Lib\$SDKVERSION\ucrt\x64;$KITSROOT\lib\$SDKVERSION\um\x64;$MATLABROOT\lib\$ARCH"
LIBPATH="$VCINSTALLDIR\lib\x64;$VCINSTALLDIR\atlmfc\lib\x64"
/>
</config>
msvcpp2019.xml
<?xml version="1.0" encoding="UTF-8" ?>
<config
Name="Microsoft Visual C++ 2019"
ShortName="MSVCPP160"
Manufacturer="Microsoft"
Version="16.0"
Language="C++"
Priority="A"
Location="$VCROOT\" >
<Details
CompilerExecutable="$COMPILER"
CompilerDefines="$COMPDEFINES"
CompilerFlags="$COMPFLAGS"
OptimizationFlags="$OPTIMFLAGS"
DebugFlags="$DEBUGFLAGS"
IncludeFlags="$INCLUDE"
LinkerExecutable="$LINKER"
LinkerFlags="$LINKFLAGS $LINKTYPE"
LinkerLibraries="$LINKLIBS"
LinkerDebugFlags="$LINKDEBUGFLAGS"
LinkerOptimizationFlags="$LINKOPTIMFLAGS"
CommandLineShell="$VCVARSALLDIR\VCVARSALL.BAT "
CommandLineShellArg="amd64"
CompilerDefineFormatter="/D%s"
LinkerLibrarySwitchFormatter="lib%s.lib;%s.lib"
LinkerPathFormatter="/LIBPATH:%s"
LibrarySearchPath="$$LIB;$$LIBPATH;$$PATH;$$INCLUDE;$MATLABROOT\extern\lib\$ARCH\microsoft"
/>
<!-- Switch guide: http://msdn.microsoft.com/en-us/library/fwkeyyhe(v=vs.71).aspx -->
<vars
CMDLINE100="$COMPILER /c $COMPFLAGS $OPTIM $COMPDEFINES $INCLUDE $SRC /Fo$OBJ"
CMDLINE200="$LINKER $LINKFLAGS $LINKTYPE $LINKOPTIM $LINKEXPORTVER $OBJS $LINKLIBS /out:$EXE"
CMDLINE250="mt -outputresource:$EXE;2 -manifest $MANIFEST"
CMDLINE300="del $EXP $LIB $MANIFEST $ILK"
COMPILER="cl"
COMPFLAGS="/Zp8 /GR /W3 /EHs /nologo /MD"
COMPDEFINES="/D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 $MATLABMEX"
MATLABMEX=" /DMATLAB_MEX_FILE"
OPTIMFLAGS="/O2 /Oy- /DNDEBUG"
INCLUDE="-I"$MATLABROOT\extern\include" -I"$MATLABROOT\simulink\include""
DEBUGFLAGS="/Z7"
LINKER="link"
LINKFLAGS="/nologo /manifest "
LINKTYPE="/DLL"
LINKEXPORT="/EXPORT:mexFunction"
LINKEXPORTVER="/EXPORT:mexFunction /EXPORT:mexfilerequiredapiversion"
LINKLIBS="/LIBPATH:"$MATLABROOT\extern\lib\$ARCH\microsoft" libmx.lib libmex.lib libmat.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libMatlabDataArray.lib libMatlabEngine.lib"
LINKDEBUGFLAGS="/debug /PDB:"$TEMPNAME$LDEXT.pdb""
LINKOPTIMFLAGS=""
OBJEXT=".obj"
LDEXT=".mexw64"
SETENV="set COMPILER=$COMPILER
set COMPFLAGS=/c $COMPFLAGS $COMPDEFINES $MATLABMEX
set OPTIMFLAGS=$OPTIMFLAGS
set DEBUGFLAGS=$DEBUGFLAGS
set LINKER=$LINKER
set LINKFLAGS=$LINKFLAGS /export:%ENTRYPOINT% $LINKTYPE $LINKLIBS $LINKEXPORT
set LINKDEBUGFLAGS=/debug /PDB:"%OUTDIR%%MEX_NAME%$LDEXT.pdb"
set NAME_OUTPUT=/out:"%OUTDIR%%MEX_NAME%%MEX_EXT%""
/>
<client>
<engine
LINKLIBS="$LINKLIBS libeng.lib libMatlabDataArray.lib libMatlabEngine.lib"
LINKEXPORT=""
LINKEXPORTVER=""
LDEXT=".exe"
LINKTYPE=""
MATLABMEX=""
/>
<mbuild
CMDLINE100="$COMPILER /c $COMPFLAGS $OPTIM $COMPDEFINES $INCLUDE $SRC /Fo$OBJ /UMX_COMPAT_SC"
CMDLINE200="$LINKER $LINKFLAGS $LINKTYPE $LINKOPTIM $LINKEXPORT $OBJS $LINKLIBS /out:$EXE"
CMDLINE250="$MTCMDLINE"
CMDLINE300="del $MANIFEST "$TEMPNAME.map""
LINKFLAGS="/nologo /manifest /DELAYLOAD:libMatlabDataArray.dll"
LINKLIBS="/MACHINE:AMD64 /LIBPATH:"$MATLABROOT\extern\lib\$ARCH\microsoft" libMatlabDataArray.lib libMatlabCppSharedLib.lib mclmcrrt.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib delayimp.lib"
INCLUDE="-I"$MATLABROOT\extern\include" -I"$MATLABROOT\extern\include\$ARCH""
COMPFLAGS="-MD -Zp8 -GR -W3 -EHsc- -nologo"
COMPDEFINES="/DMSVC /DIBMPC /D_CRT_SECURE_NO_DEPRECATE"
OPTIMFLAGS="-O2 -DNDEBUG"
LINKEXPORT=""
LINKEXPORTVER=""
LDEXT=".exe"
MATLABMEX=""
MTCMDLINE="mt -outputresource:$EXE;1 -manifest $MANIFEST"
LINKTYPE=""
LINKDEBUGFLAGS="/debug /PDB:"$TEMPNAME.pdb""
/>
<mbuild_com
CMDLINE000="copy "$MATLABROOT\extern\include\$ARCH\mwcomutil.tlb" "$OUTDIR""
CMDLINE001="midl /nologo /$ARCH $COMPINCLUDE /D NDEBUG /out "$OUTDIR" mwcomtypes.idl"
CMDLINE002="midl /nologo /$ARCH $COMPINCLUDE /D NDEBUG /out "$OUTDIR" "$COMIDL""
CMDLINE100="$COMPILER $COMPFLAGS $OPTIM $COMPDEFINES $INCLUDE $COMPINCLUDE $SRC /Fo$OBJ"
CMDLINE150="rc /fo "$RESFILE" "$RCFILE""
CMDLINE250="mt -outputresource:$EXE;2 -manifest $MANIFEST"
CMDLINE275=""$MATLABROOT\runtime\$ARCH\mwregsvr.exe" $EXE"
CMDLINE300="del $MANIFEST "$OUTDIR\mwcomutil.tlb" "$RESFILE""
OUTDIR="."
INCLUDE="$INCLUDE -I"$OUTDIR" -I"$MATLABROOT\extern\include\$ARCH""
COMPFLAGS="/c /GR /W3 /EHsc- /nologo /MT"
COMPDEFINES="/DMSVC /DIBMPC /D_CRT_SECURE_NO_DEPRECATE /D_SECURE_SCL=0"
COMPINCLUDE="-I"$MATLABROOT\extern\include" -I"$OUTDIR""
LINKEXPORT="/DLL /def:"$DEFFILE""
LINKEXPORTVER="/DLL /def:"$DEFFILE""
LINKLIBS="/MACHINE:AMD64 $LINKLIBS mclmcrrt.lib $MCLMAINLIB_MS "$RESFILE""
LDEXT=".dll"
USERONLY=""
LINKTYPE=""
MATLABMEX=""
/>
</client>
<locationFinder>
<VCROOT>
<and>
<or>
<hklmExists path="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hkcuExists path="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hklmExists path="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hkcuExists path="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
</or>
<cmdReturns name="set "vcroot=$$"&for /f "delims= " %a in ('type "$$\VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt"') do @if exist "$$\VC\Tools\MSVC\%a\bin\HostX64\x64\cl.exe" call echo %vcroot%" />
</and>
</VCROOT>
<SDKROOT>
<or>
<hklmExists path="SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0" name="InstallationFolder" />
<hkcuExists path="SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0" name="InstallationFolder" />
<hklmExists path="SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0" name="InstallationFolder" />
<hkcuExists path="SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0" name="InstallationFolder" />
</or>
</SDKROOT>
<VSINSTALLDIR>
<or>
<hklmExists path="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hkcuExists path="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hklmExists path="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hkcuExists path="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
</or>
</VSINSTALLDIR>
<VCINSTALLDIR>
<and>
<or>
<hklmExists path="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hkcuExists path="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hklmExists path="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hkcuExists path="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
</or>
<cmdReturns name="set "vcroot=$$"&for /f "delims= " %a in ('type "$$\VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt"') do @if exist "$$\VC\Tools\MSVC\%a\bin\HostX64\x64\cl.exe" call echo %vcroot%\VC\Tools\MSVC\%a" />
</and>
</VCINSTALLDIR>
<VCVARSALLDIR>
<and>
<or>
<hklmExists path="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hkcuExists path="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hklmExists path="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
<hkcuExists path="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" name="16.0" />
</or>
<fileExists name="$$\VC\Auxiliary\Build\vcvarsall.bat" />
<dirExists name="$$"/>
</and>
</VCVARSALLDIR>
<KITSROOT>
<or>
<hklmExists path="SOFTWARE\Wow6432Node\Microsoft\Windows Kits\Installed Roots" name="KitsRoot10" />
<hkcuExists path="SOFTWARE\Wow6432Node\Microsoft\Windows Kits\Installed Roots" name="KitsRoot10" />
<hklmExists path="SOFTWARE\Microsoft\Windows Kits\Installed Roots" name="KitsRoot10" />
<hkcuExists path="SOFTWARE\Microsoft\Windows Kits\Installed Roots" name="KitsRoot10" />
</or>
</KITSROOT>
<SDKVERSION>
<and>
<or>
<hklmExists path="SOFTWARE\Wow6432Node\Microsoft\Windows Kits\Installed Roots" name="KitsRoot10" />
<hkcuExists path="SOFTWARE\Wow6432Node\Microsoft\Windows Kits\Installed Roots" name="KitsRoot10" />
<hklmExists path="SOFTWARE\Microsoft\Windows Kits\Installed Roots" name="KitsRoot10" />
<hkcuExists path="SOFTWARE\Microsoft\Windows Kits\Installed Roots" name="KitsRoot10" />
</or>
<!-- For each folder inside '<KITSROOT>\include' check for 'ucrt' and if exists return that folder name -->
<cmdReturns name="echo off&set "sdkversion="&(for /f %a IN ('dir "$$\include\" /b /ad-h /on') do ( @if exist "$$\include\%a\ucrt\" set "sdkversion=%a" ))&call echo %sdkversion%" />
</and>
</SDKVERSION>
</locationFinder>
<env
PATH="$VCINSTALLDIR\bin\HostX64\x64\;$VCROOT\Common7\IDE\VC\vcpackages;$VCROOT\Common7\IDE;$VCROOT\Common7\Tools;$SDKROOT\Bin\$SDKVERSION\x64;$SDKROOT\Bin\$SDKVERSION\x86;$SDKROOT\Bin\x64;$SDKROOT\Bin\x86;"
INCLUDE="$VCINSTALLDIR\include;$VCINSTALLDIR\atlmfc\include;$KITSROOT\include\$SDKVERSION\ucrt;$KITSROOT\include\$SDKVERSION\shared;$KITSROOT\include\$SDKVERSION\um;$KITSROOT\include\$SDKVERSION\winrt;$MATLABROOT\extern\include"
LIB="$VCINSTALLDIR\lib\x64;$VCINSTALLDIR\atlmfc\lib\x64;$KITSROOT\Lib\$SDKVERSION\ucrt\x64;$KITSROOT\lib\$SDKVERSION\um\x64;$MATLABROOT\lib\$ARCH"
LIBPATH="$VCINSTALLDIR\lib\x64;$VCINSTALLDIR\atlmfc\lib\x64"
/>
</config>
或者将那两个xml文件替换为上述内容,并修改注册表
a、输入regedit
b、找到计算机\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\Sxs\VS7
新建或修改
以上两种方法应该都能解决matlab无法识别vs编译器的问题。明明安装了vs2019却说找不到支持的编译器。
这之后可以执行mex -setup命令试试文章来源:https://www.toymoban.com/news/detail-458870.html
文章来源地址https://www.toymoban.com/news/detail-458870.html
到了这里,关于Matlab2022a无法识别vs2019编译器,未检测到支持的编译器,错误使用Mex -setup error cannot find support compiler的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!