Linux下C和matlab混合编程学习(1)

转载 2017年07月25日 21:05:16
1.编译m文件为可执行文件
mex -setup设置好了c编译器之后。
写个简单函数test.m
function test
x=0:0.01:2*pi;
y=sin(x);
plot(x,y)
保存.
编译mcc -m test.m
就会生成可执行的文件test和一个脚本run_test.h
./run_test.h<matlab_root>/bin

2.C中调用matlab计算引擎(绘图等)
步骤:
(1)安装csh;
(2)设置:动态库路径LD_LIBRARY_PATH中添加<matlab_root>/bin/<Arch>; 
       PATH路径中添加<matlab_root>/bin
(3)编译:gcc test.c -o test -I $HOME/MATLAB/R2011b/extern/include-L $HOME/MATLAB/R2011b/bin/glnx86/ -leng -lmx -lmex
 (注意cpu是x86还是a64)
(4)运行:./test
(参考:http://hi.baidu.com/36470902/blog/item/c323a5b14d3c175c08230250.html

其中第(2)步设置,在~/.bashrc中添加:
MATLAB="Matlab_Installed_Directory"(比如说我的安在了$HOME/MATLAB/R2011b下面,所以应该写全到2011b)
export PATH=~/Program:$MATLAB/bin:$PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MATLAB/bin/glnx86#这里注意cpu是x86还是a64
exportC_INCLUDE_PATH=$C_INCLUDE_PAT:$MATLAB/extern/include
export LIBRARY_PATH=$LIBRARY_PATH:$MATLAB/bin/glnx86
(前面两行是一个是可执行文件搜索路径,一个是动态库搜索路径,后面两个是gcc编译时的include头文件搜索路径和动态库搜索路径)
这样第三步编译就可以简单的写为:
gcc test.c -o test -leng -lmx -lmex


源文件test.c如下:

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "engine.h"

#define N 500

main()
{
int i;
double x[N],y[N];
Engine *ep;

for(i=0;i<N;i++){
x[i]=0.01*i;
y[i]=sin(x[i]);
}

//启动matlab计算引擎,异常处理
if(!(ep=engOpen(NULL))){
printf("Can't start Matlab engine!");
exit(1);
}

//定义mxArray
mxArray *xx=mxCreateDoubleMatrix(1,N,mxREAL);
mxArray *yy=mxCreateDoubleMatrix(1,N,mxREAL);

//将数组复制到mxArray
memcpy(mxGetPr(xx),x,N*sizeof(double));
memcpy(mxGetPr(yy),y,N*sizeof(double));

//将mxArray数组写入到Matlab工作空间,并命名
engPutVariable(ep,"xx",xx);
engPutVariable(ep,"yy",yy);

//向Matlab引擎发送画图命令
engEvalString(ep,"plot(xx,yy);");

printf("Press 'Enter' to exit!");
getchar();

//销毁mxArray数组
mxDestroyArray(xx);
mxDestroyArray(yy);

//关闭matlab引擎
engClose(ep);

}

有图为证:
Linux下C和matlab混合编程学习(1)

相关文章推荐

解决In function `mwException::mwException()': undefined reference to `mclcppCreateError'

在进行这个实验中,通过c++调用matlab中自己编写的函数(是通过将该函数在matlab中mcc编译成.so,然后c++中调用这个.so的方式),报错记录总结。实验环境:Ubuntu 12.04.5...

多进制LDPC—EMS译码算法

EMS算法步骤: 1、初始化

Linux下C++,matlab混合编程

C++调用matlab生成的动态库文件,再生成新的动态库文件使用python调用C++调用matlab生成的动态库文件调用过程:(1). 设定编译器为gcc,在matlab 命令行依次执行命令mex ...

linux下c/c++混合编程

c++给c提供接口的几种方法
  • mxgsgtc
  • mxgsgtc
  • 2014年09月20日 21:33
  • 2149

linux下C与C++混合编程

首先,混合编程不是指在同一个文件里写C与C++。 比如说想在同意文件里同时 弱类型检查,又强类型检查,那真够呛。 混合编程包括:1,C++引用C的头文件;2,g++生成的.o与gcc生成的.o相...

Matlab C/C++混合编程实例学习

在某些情况下,我们需要使用Matlab C/C++混合编程的方法,或达到提高Matlab运行效率,或解决内存不足等问题。推荐阅读Matlab C/C++, Fortran, and Python AP...

Linux下C编程的学习_1

破解过程中,我们是无法避免来写程序的,恢复算法,所以开始我们这一系列文章的学习。...

linux下C时间编程(1)——时间显示与转换

时间显示:   本文将着重阐述在linux下C开发中实际应用的时间编程的一些方法和技巧,对一些原理性的东西并不进行深入的讨论,如果读者有更深刻的理解,欢迎加入讨论。   在实际C开发中,我们常常需...

Linux下C编程-----文件操作(1) 通过系统调用简单操作标准输入、标准输出、标准错误

Linux的 C系统调用操作  ,下面我们就来练习下 简单的系统调用操作 read系统调用测试 /***************************************************...

Linux下C编程:常用系统调用接口小结(1)

mode_t umask(mode_t cmask):设置当前进程的文件创建pi
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux下C和matlab混合编程学习(1)
举报原因:
原因补充:

(最多只允许输入30个字)