You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 01:35:27