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

使用CMake+matlab_add_mex编译mex文件找不到simstruc.h问题求助

问题成因
  • simstruc.h是Simulink专用的头文件,不属于基础Matlab MEX开发的头文件集合,find_package(Matlab)默认不会自动搜索并导入该头文件对应的目录
  • 直接在Simulink环境下执行mex命令时,Simulink会自动将自身的头文件目录注入到编译参数中,因此不会触发头文件缺失报错
解决方法

方案1:显式添加Simulink头文件路径

find_package(Matlab)执行成功后会自动导出Matlab_ROOT_DIR变量,指向本地Matlab的安装根目录,simstruc.h通常存放在该根目录下的simulink/include路径中,你可以在CMake配置中显式导入该路径:

find_package(myLib REQUIRED)
find_package(Matlab REQUIRED)

# 全局导入Simulink头文件路径
include_directories(${Matlab_ROOT_DIR}/simulink/include)
# 更推荐的写法:仅给当前MEX目标添加头文件路径,避免全局污染
# target_include_directories(cmake_mySrc.mexw64 PRIVATE ${Matlab_ROOT_DIR}/simulink/include)

matlab_add_mex(NAME cmake_mySrc.mexw64 SRC mySrc.cpp LINK_TO myLib::myLib)

方案2:显式查找Matlab的Simulink组件

CMake 3.14及以上版本的FindMatlab模块支持指定查找Simulink组件,开启后会自动导入Simulink相关的头文件路径:

find_package(myLib REQUIRED)
# 声明需要查找Simulink组件
find_package(Matlab REQUIRED SIMULINK)
matlab_add_mex(NAME cmake_mySrc.mexw64 SRC mySrc.cpp LINK_TO myLib::myLib)
补充说明
  • 如果后续出现其他Simulink相关头文件缺失,可以按需添加${Matlab_ROOT_DIR}/extern/include路径到编译选项中
  • 建议使用3.14及以上版本的CMake,避免因FindMatlab模块功能不全导致的兼容问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:39:01