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

Simulink Coder构建报错:缺失成功文本及链接错误原因咨询

解决MATLAB R2017b Embedded Coder生成并发模型代码时的_InterlockedIncrement链接错误

我之前在处理类似的数据并行模型代码生成时也碰到过这个问题,来给你拆解下错误原因和可行的解决办法:

错误原因分析

这个链接错误的核心是代码里用到的_InterlockedIncrement函数找不到实现,主要有两个常见诱因:

  1. 目标平台/编译器不匹配:_InterlockedIncrement是Windows系统特有的Win32 API函数,用于多线程环境下的原子递增操作。如果你的目标编译环境不是Windows(比如Linux、嵌入式RTOS),或者你在Windows上用了不默认链接kernel32.lib的编译器(比如MinGW未正确配置),链接器就找不到这个函数的实现。
  2. R2017b版本的代码生成配置疏漏:MATLAB R2017b的Embedded Coder对并发模型的代码生成,默认可能偏向Windows平台的线程支持。如果你的模型配置里目标工具链、平台设置和实际需求不匹配,就会生成依赖Windows同步函数的代码,进而导致链接失败。

具体解决办法

1. 检查并修正目标工具链与平台配置

  • 打开模型的Configuration Parameters(按Ctrl+E快速打开);
  • 转到Code Generation > Toolchain Settings:
    • 如果你的目标平台是Windows,确保选择的Toolchain是微软MSVC这类原生支持Windows API的编译器;
    • 如果是其他平台(比如Linux、嵌入式设备),切换到对应平台的Toolchain(比如GCC for Linux);
    • 若使用Windows平台的编译器,检查Linker Flags中是否包含kernel32.lib——这个系统库包含_InterlockedIncrement的实现,没有的话手动添加进去。

2. 调整并发执行的代码生成选项

  • 在Configuration Parameters中,进入Code Generation > Interface,查看Code replacement library的设置:如果目标平台不支持Windows同步函数,切换到适配你平台的代码替换库(比如针对嵌入式RTOS的专用库);
  • 再转到Simulation > Parallel Computing,确认并发执行的设置是否符合目标平台的能力。如果目标平台不支持多线程,可能需要调整模型的并行策略,或者暂时禁用部分并行逻辑。

3. 手动替换同步函数(临时 workaround)

如果暂时没法调整编译器配置,可以先生成代码再手动修改:

  • 执行rtwbuild(mdl)生成代码(即使链接失败,代码文件会保存在指定的生成目录里);
  • 在生成的C代码中找到调用_InterlockedIncrement的位置,替换成目标平台支持的原子递增函数:比如Linux下用__sync_add_and_fetch,或者自己实现一个基于互斥锁的安全递增函数;
  • 最后用目标编译器手动编译链接修改后的代码。

内容的提问来源于stack exchange,提问作者Bhavanithya Thiraviaraja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:34:41