将C++代码编译成Matlab可以调用的.mexw文件(涉及多个.cpp文件的编译)
来源:互联网 发布:码云的独立域名 编辑:程序博客网 时间:2024/06/01 07:16
最近,帮师兄把一些现成的C++代码编译成为Matlab可以直接调用的.mexw32/.mexw64(由系统的位数决定)形式的文件。达到Matlab“扬长避短”,加快运行速度的目的。
由于之前完全没有接触过这方面的知识,所以首先就得找一些入门性的文章来看一看,把下面这篇博文看一下,基本上就知道该做些什么事情了:
http://blog.csdn.net/zouxy09/article/details/20553007
总结起来就是,你得include一个叫"mex.h"的头文件,然后还得自己再写一个mexFunction()的接口函数(实现Matlab和C++之间的“交流”),最后,打开你的Matlab,mex -setup,选择一个合适的编译器(不同版本的Matlab出现的结果可能不一样)。最后再mex一下对应的.cpp文件,就可以生成我们想要的.mexw32/.mexw64文件了。
看完上面的博文之后,会发现作者举的两个例子都是对一个.cpp文件进行编译而已,而师兄给我的C++代码却是一个.h文件和一个.cpp文件(假设为Add.h和Add.cpp),Add.h文件是一个类的声明,而Add.cpp文件是对类的成员函数的实现,那么,这个时候,我应该怎样进行编译呢?
答案其实在上面的博文中也有提到,只是没说得那么详细,玄机就在这里:
恩,没错,这个时候得根据自己的需要(具体看要用到Add.h)中的哪些函数,然后额外再写一个类似于main.cpp的文件,在main.cpp中将Add.h包含进来,文件中的函数可以调用Add类的成员函数,来实现我们想到达到的功能。最后才mex 上面相互依赖的两个.cpp文件即可得到相应功能的.mexw32/.mexw64文件了。
可能单单靠文字描述还不是很清晰,比如我对上面的博文的第一个例子做了下面的修改:
新建一个Add类,具体的文件内容如下:
Add.h(声明了一个addadd成员函数):
#pragma once#include <iostream>using namespace std;class Add{public:Add();~Add();double addadd(double, double);};
#include "Add.h"Add::Add(){}Add::~Add(){}double Add::addadd(double x, double y){return x + y;}
#include"Add.h"#include"mex.h"void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){double *a;double b, c;plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);a = mxGetPr(plhs[0]);b = *(mxGetPr(prhs[0]));c = *(mxGetPr(prhs[1]));Add m;*a = m.addadd(b, c);}
写好上面的三个文件(放在同一个目录下面)之后,打开Matlab,设置编译器,然后cd 到上面的三个文件所在的目录下面,再mex mexAdd.cpp Add.cpp即可得到一个mexAdd.mexw64/mexAdd.mexw32。
这样一来,我们就实现了编译多个相互依赖的.cpp文件,以一个主要的.cpp文件来写接口函数,调用其他.cpp文件中的类的函数的功能。
BTW,如果有依赖OpenCV库的话,可以参考上面的博文写一个make.m文件,主要要修改下面的红色方框部分:
将红色方框改为多个.cpp文件(比如:‘mexAdd.cpp Add.cpp’),再运行make.m,即可得到一个.mexw32/.mexw64文件了。
- 将C++代码编译成Matlab可以调用的.mexw文件(涉及多个.cpp文件的编译)
- MATLAB将c/cpp文件编译成mex32/mex64文件的方法
- 如何使用MATLAB将c/cpp文件编译成mex32/mex64文件
- 将c代码编译成dll文件
- 浅析将matlab函数编译成dll供Cpp调用的方法
- matlab调用c++,应该用mex把cpp编译成 .mex文件供MATLAB在命令行方式下调用吧
- matlab函数编译成dll供Cpp调用的方法
- 一个将目录内所有c代码分别编译成独立的out文件的Makefile
- 多个.c文件编译成运行
- MATLAB 调用编译.c/.cpp文件
- C#.NET如何将cs文件编译成dll文件 exe文件 如何调用dll文件
- .c/.cpp文件编译成exe .mdp文件
- 一个将文件夹下所有c文件编译成o文件的make
- 在Linux/Solaris上,将c文件编译成dll文件的方法
- 将java程序编译成独立运行的exe文件
- 将java程序编译成独立运行的exe文件
- 记录将FLANN算法编译成MEX文件的过程
- java编译成C的头文件时,带包的编译方式
- 17-maven插件1
- 整理:著名软件是使用什么语言写的?
- JVM简介
- LeetCode Generate Parentheses递归方法
- ECharts插件简单入门——柱状图
- 将C++代码编译成Matlab可以调用的.mexw文件(涉及多个.cpp文件的编译)
- Linux内核版本和系统启动过程以及具体内核移植和根文件系统的制作
- 字符串之最
- iOS presentViewController:animated:completion:延迟问题
- 定位(相对、绝对)、z-index
- Flask web表单
- 两种高性能I/O设计模式reactor与proactor
- Android Studio代码大小写提示
- JavaScript事件详解