VS与Matlab混合编译 - mexw64
来源:互联网 发布:凸优化应用 编辑:程序博客网 时间:2024/06/08 01:23
最近在开源夏令营中做hackrf for android的题目,android方面问题并不大,但是hackrf和通信原理方面遇到不少问题。因此想搭建matlab与hackrf通信的环境,供自己理论调试用。今天刚安装好matlab2011(x64)和vs2013,至于怎么安装这里就不就不描述了,大家可以参考百度。另外补充我的系统是win7 x64位,其他系统遇到的情况可能不太一样,请自行解决咯。其实关于混合编程早有一大堆文章描述,例如文章最后的两个参考文献,但是参考文献都是旧版本的matlab和vs,有些新的特新没有体现出来,所以我还是总结一下搭建方法。
首先说明一下mexw64,最简单的理解,mexw64就是dll。matlab较旧的版本可以直接调用dll,到了新版本好像不行了,经过各种百度,matlab2011需要调用mexwXX,这里的XX可以是32和64,分别代表32位和64位。matlab可以将这个dll当作一个函数调用,如图:
这个是matlab调用的效果图,接下来一步一步的说一下如何搭建。
在搭建之前,先详细说明一下我的环境。
matlab版本:
安装目录:D:\Program Files\MATLAB
VS版本:
VS安装目录:C:\Program Files (x86)\Microsoft Visual Studio 12.0
1)创建VS工程
2)配置工程,选择应用程序类型为DLL,附加选项中先选择导出符号后选择空项目。
3)为工程添加test.h test.cpp test.def三个文件。
test.h
#include "matrix.h"#include "mex.h"#define TESTMATLAB_EXPORTS#ifdef TESTMATLAB_EXPORTS#define MEX_FUNCTION_API __declspec(dllexport)#else#define MEX_FUNCTION_API __declspec(dllimport)#endifMEX_FUNCTION_API void mexFunction(int nlhs, mxArray* plhs[], int nrhs, mxArray* prhs[]);
test.cpp
#include "test.h"#include <string>#include "stdlib.h"#include <iostream>using namespace std;void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray*prhs[]){double *Encoder_Decoder_db = NULL;string Path_Str = ""; // the path of the bandsunsigned int bufferlength = mxGetM(prhs[1])*mxGetN(prhs[1]) + 1;char *Path_Str_ch = new char[bufferlength];short Encoder_Decoder; // 0: encoder, 1: decoderEncoder_Decoder_db = mxGetPr(prhs[0]);mxGetString(prhs[1], Path_Str_ch, bufferlength);Encoder_Decoder = (short)*Encoder_Decoder_db;Path_Str = Path_Str + Path_Str_ch;mexPrintf("\nBegin of Test pagekpang 2014-7-29 \n");mexPrintf("%d, %s\n", Encoder_Decoder, Path_Str_ch);mexPrintf("End of Test pagekpang 2014-7-29\n");}
LIBRARY "testp"EXPORTS mexFunction
这时候会发现,整个项目红了一大票,到处报错。主要是因为没有添加include和lib,接下来就需要对工程进行配置。
4)在自己的项目中右键-》属性。找到 配置属性 底下的 VC++ 目录
分别设置包含目录和库目录,将matlab的函数导入到VS。
(1)包含目录
(2)库目录
5)设置运行库
6)添加lib
7)模块定义文件
8)添加x64平台
(1)选择配置管理器
(2)选择新建
(3)输入参数如下
9)编译
10)拷贝工程目录下的x64\Debug\TestMatlab.dll到Matlab的工作目录中,并且更名为TestMatlab.mexw64,就可以运行了。
文中大部分工作我也是参考了《Visual Studio创建Matlab mex(dll)函数》,只是有些地方配置不太一样,改变了一下参数。下一步要完善的是hackrf的操作函数,将libhackrf植入到Matlab中。
参考文献
http://blog.sina.com.cn/s/blog_6ec1700e0100pgtd.html
http://www.360doc.com/content/14/0411/17/1944636_368074271.shtml
- VS与Matlab混合编译 - mexw64
- VS与Matlab混合编译 - mexw64
- vs&matlab混合编程-- - mexw64
- Simulink与mexw64混合
- matlab编译.mexw32/.mexw64文件
- Matlab 与 vs 混合编程
- matlab 与VS 混合编程
- MATLAB与VS混合编程
- Matlab与VS混合编程总结
- matlab与C/C++混合编译
- MATLAB和VS混合编程
- Matlab与VC混合
- Matlab 、C++代码混合编译
- Matlab调用c生成mexw64笔记
- matlab invalid mex-file caffe_.mexw64
- Matlab R2010a和vs 2010混合编程
- VS 调用 Matlab (混合编程)
- Matlab R2010a和vs 2010混合编程
- framebuffer 简介
- Hardcoded string "下一步", should use @string resource警告
- 导出和导入AWR的信息(ORACLE)
- Excel更新单元格的内容
- Codility-Flags
- VS与Matlab混合编译 - mexw64
- 2、CRM2011编程实战——设置窗体某一项的值为服务器时间
- CI框架UEditor编辑器PHP版无法获取POST值
- STL容器学习总结
- 内存分区那些事
- 编写gstreamill的job文件
- 浅谈 Python 的 with 语句
- 【Unity 3D】学习笔记四十四:路径渲染
- 僵尸进程