在Linux(Ubuntu)编译Matlab生成的C代码创建Linux MEX文件的步骤
在Ubuntu Matlab(无Coder)中用gcc编译Windows生成的MEX C代码步骤
1. 配置Ubuntu环境依赖
- 安装gcc和make工具:
sudo apt update && sudo apt install gcc make - 打开Matlab,验证编译器可用性:
在Matlab命令行输入mex -setup C,确认gcc被识别为可用C编译器。如果提示未找到,检查gcc是否安装正确即可,一般无需额外配置。
2. 准备代码文件
- 将Windows下Matlab生成的所有C源文件(
.c)、头文件(.h)复制到Ubuntu的同一个本地目录(如~/mex_project)。 - 检查代码中的路径引用:替换所有硬编码的Windows路径为Linux相对/绝对路径,确保本地头文件用
#include "xxx.h"格式引用。
3. 推荐:用Matlab自带mex命令编译(避免手动处理gcc参数)
这是最简单的方式,Matlab会自动处理所有依赖和编译参数:
- 在Matlab中切换到代码目录:
cd ~/mex_project - 执行编译命令(替换为你的主源文件名和其他依赖源文件):
mex -v your_main_code.c other_dependency_code.c-v参数用于输出详细编译日志,方便排查错误。- 编译成功后,会生成后缀为
.mexa64的MEX文件(Ubuntu x64平台)。
4. 手动用gcc编译(仅当需要自定义参数时)
如果必须直接调用gcc,按以下步骤操作:
4.1 获取Matlab编译参数
在Matlab命令行执行:
mex -v -n your_main_code.c
该命令会输出mex工具实际调用gcc的完整参数列表,复制下来备用。
4.2 手动执行编译链接命令
将复制的参数替换为实际的源文件名,示例命令如下(需根据你的Matlab安装路径调整):
# 编译生成目标文件 gcc -c -fPIC -DMATLAB_MEX_FILE -I/usr/local/MATLAB/R2020a/extern/include -I/usr/local/MATLAB/R2020a/simulink/include your_main_code.c other_dependency_code.c # 链接生成MEX文件 gcc -shared -Wl,--version-script,/usr/local/MATLAB/R2020a/extern/lib/glnxa64/mexFunction.map -Wl,-rpath-link,/usr/local/MATLAB/R2020a/bin/glnxa64 -o your_mex_file.mexa64 your_main_code.o other_dependency_code.o -L/usr/local/MATLAB/R2020a/extern/lib/glnxa64 -lmex -lmx -lmat -lm
关键参数说明:
-fPIC:生成位置无关代码,Linux共享库(MEX本质是共享库)的强制要求-DMATLAB_MEX_FILE:定义宏,告知代码当前编译目标为MEX文件-I:添加Matlab头文件搜索路径-shared:指定生成共享库-L:添加Matlab库文件搜索路径,-lmex/-lmx/-lmat/-lm链接Matlab核心库
5. 测试MEX文件
在Matlab中直接调用生成的.mexa64文件,参数与原Matlab函数一致,验证运行结果是否符合预期。
内容的提问来源于stack exchange,提问作者SheppLogan
相关产品推荐
相关产品推荐

