Simulink Embedded Coder生成代码ARM64架构编译报错
解决Simulink Embedded Coder生成代码的链接错误
问题根源
你只编译了入口文件ert_main.c,但Simulink生成的模型核心实现文件(包含_CodeGenerationMontags_M、CodeGenerationMontags_initialize等符号定义)没有被加入编译链接流程,导致链接器找不到这些符号。
解决步骤
1. 确认生成的核心代码文件
打开CodeGenerationMontags_ert_rtw/目录,你会看到以下关键文件(名字和你的模型名对应):
CodeGenerationMontags.c:包含CodeGenerationMontags_initialize、CodeGenerationMontags_step、CodeGenerationMontags_terminate的函数实现CodeGenerationMontags_data.c:包含全局变量CodeGenerationMontags_M的定义- 可能还有辅助文件:
rt_nonfinite.c、rtGetInf.c、rtGetNaN.c等
2. 修改编译命令,包含所有源文件
把所有相关的.c文件都加入gcc命令,示例:
cd "/path/CodeGenerationMontags_ert_rtw/" && gcc ert_main.c CodeGenerationMontags.c CodeGenerationMontags_data.c rt_nonfinite.c -o ert_main && "./ert_main"
注意:根据你实际生成的文件列表调整,确保没有遗漏任何
.c文件。
3. 更省心的方法:用自动生成的Makefile编译
Embedded Coder会自动生成ert_rtw.mk或Makefile,直接在终端进入代码目录执行:
cd "/path/CodeGenerationMontags_ert_rtw/" && make
这个命令会自动处理所有依赖、编译选项和链接流程,完全避免手动写命令的遗漏问题。
4. 配置VS Code编译任务(如果用VS Code编译)
修改.vscode/tasks.json,把所有源文件加入编译参数:
{ "version": "2.0.0", "tasks": [ { "label": "Build Simulink Generated Code", "type": "shell", "command": "gcc", "args": [ "ert_main.c", "CodeGenerationMontags.c", "CodeGenerationMontags_data.c", "rt_nonfinite.c", "-o", "ert_main" ], "options": { "cwd": "/path/CodeGenerationMontags_ert_rtw/" }, "group": { "kind": "build", "isDefault": true }, "problemMatcher": ["$gcc"] } ] }
额外注意事项
- Mac M2的ARM64架构下,
gcc实际是clang的别名,无需额外添加架构编译参数,系统会自动适配。 - 如果执行
make时提示找不到命令,安装Xcode Command Line Tools即可:xcode-select --install
内容的提问来源于stack exchange,提问作者Leopold
相关产品推荐
相关产品推荐

