Simulink自动生成代码编译报错:No supported target architecture
问题:Simulink生成代码在Windows x64下编译报"No supported target architecture"错误
背景
第一次在Windows环境编程,用Windows Server x64机器通过Matlab Simulink自动生成了C代码、makefile和编译.bat脚本。运行bat脚本时,cl编译命令最初找不到stdlib.h等头文件,在makefile中添加包含目录后,出现新的架构错误,尝试添加-DTARGET=x86_64宏定义也无法解决。
编译错误日志
cl -c -nologo -GS -W4 -DWIN32 -D_MT -MT -D_CRT_SECURE_NO_WARNINGS /Od /Oy- -Zi -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DMAT_FILE=1 -DONESTEPFCN=1 -DTERMFCN=1 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=0 -DTARGET=x86_64 -DTID01EQ=0 -DMODEL=TestSim2 -DNUMST=2 -DNCSTATES=0 -DHAVESTDIO -DRT -DUSE_RTMODEL @TestSim2_comp.rsp -Fo"DAHostLib_Network.obj" "G:\toolbox\shared\spc\src_ml\extern\src\DAHostLib_Network.c" DAHostLib_Network.c D:\Program Files\MSYS2\mingw64\include\excpt.h(87): warning C4115: '_EXCEPTION_RECORD': named type definition in parentheses D:\Program Files\MSYS2\mingw64\include\excpt.h(87): warning C4115: '_CONTEXT': named type definition in parentheses D:\Program Files\MSYS2\mingw64\include\winnt.h(137): fatal error C1189: #error: No supported target architecture. NMAKE : fatal error U1077: '"D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64\cl.EXE"' : return code '0x2'
已修改的Makefile内容
########################################################################### ## INCLUDE PATHS ########################################################################### # jr added this include, it was previously blank INCLUDES_BUILDINFO = 'C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.Emscripten.2.0.23.Sdk.win-x64\6.0.15\tools\emscripten\system\lib\libc\musl\include;D:\Program Files\MSYS2\mingw64\include' INCLUDES = $(INCLUDES_BUILDINFO) ########################################################################### ## DEFINES ########################################################################### DEFINES_BUILD_ARGS = -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DMAT_FILE=1 -DONESTEPFCN=1 -DTERMFCN=1 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=0 # jr added this target - maybe also use -DWIN32_LEAN_AND_MEAN DEFINES_CUSTOM = -DTARGET=x86_64
当前疑问
代码中并未调用windows.h,却出现架构相关错误,考虑是否应该通过Matlab生成的setup_msvc.bat配置MSVC环境,而非直接用命令行编译?
解决思路
- 移除第三方头文件目录:你添加的MinGW和Emscripten的头文件目录,会和MSVC自带的标准库/Windows头文件冲突。MinGW的
winnt.h和MSVC的架构判断逻辑不兼容,直接删掉这两个包含目录,依赖MSVC自身的头文件路径即可。 - 用setup_msvc.bat配置环境:运行这个批处理文件会自动配置MSVC的编译环境(包括正确的头文件路径、库路径、编译器变量),避免手动配置出错。操作步骤:打开命令提示符,先执行
setup_msvc.bat,再运行编译脚本。 - 删除多余的架构宏定义:MSVC的
HostX64\x64\cl.exe本身就是针对x64平台的编译器,不需要手动添加-DTARGET=x86_64,这个宏定义会干扰头文件的架构检测逻辑,直接移除。 - 重新生成Simulink配置:打开Simulink的"Configuration Parameters",检查"Code Generation" -> "Target selection"是否选择了适配Windows x64的目标(比如Embedded Coder对应的Windows目标),重新生成代码和编译脚本,避免手动修改makefile导致的配置不一致。
内容的提问来源于stack exchange,提问作者jeremy_rutman
相关产品推荐
相关产品推荐

