vs&matlab混合编程-- - mexw64



转载:http://blog.csdn.net/wak0408/article/details/38272163


这个文章的流程是,在vs里面生成matlab可以读懂的文件(mexw**),当然也可以在matlab里面编译 .c/.cpp,直接生成(mexw**),matlab的.m文件就可以直接调用了。

vs&matlab混合编程,例如文章最后的两个参考文献,但是参考文献都是旧版本的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

  1. #include "matrix.h"  
  2. #include "mex.h"  
  3. #define TESTMATLAB_EXPORTS  
  4. #ifdef TESTMATLAB_EXPORTS  
  5. #define MEX_FUNCTION_API __declspec(dllexport)  
  6. #else  
  7. #define MEX_FUNCTION_API __declspec(dllimport)  
  8. #endif  
  9. MEX_FUNCTION_API void mexFunction(int nlhs, mxArray* plhs[], int nrhs, mxArray* prhs[]);  
#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)
#endif
MEX_FUNCTION_API void mexFunction(int nlhs, mxArray* plhs[], int nrhs, mxArray* prhs[]);

test.cpp

  1. #include "test.h"  
  2. #include <string>  
  3. #include "stdlib.h"  
  4. #include <iostream>  
  5. using namespace std;  
  6. void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray*prhs[])  
  7. {  
  8.     double *Encoder_Decoder_db = NULL;  
  9.     string Path_Str = "";     // the path of the bands  
  10.     unsigned int bufferlength = mxGetM(prhs[1])*mxGetN(prhs[1]) + 1;  
  11.     char *Path_Str_ch = new char[bufferlength];  
  12.     short Encoder_Decoder;  // 0: encoder, 1: decoder  
  13.     Encoder_Decoder_db = mxGetPr(prhs[0]);  
  14.     mxGetString(prhs[1], Path_Str_ch, bufferlength);  
  15.     Encoder_Decoder = (short)*Encoder_Decoder_db;  
  16.     Path_Str = Path_Str + Path_Str_ch;  
  17.     mexPrintf("\nBegin of Test pagekpang 2014-7-29 \n");  
  18.     mexPrintf("%d, %s\n", Encoder_Decoder, Path_Str_ch);  
  19.     mexPrintf("End of Test pagekpang 2014-7-29\n");  
  20. }  
#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 bands
	unsigned int bufferlength = mxGetM(prhs[1])*mxGetN(prhs[1]) + 1;
	char *Path_Str_ch = new char[bufferlength];
	short Encoder_Decoder;  // 0: encoder, 1: decoder
	Encoder_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");
}


test.def
  1. LIBRARY    "testp"  
  2. EXPORTS  
  3.         mexFunction  
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

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在 MATLAB 中安装 Mingw-w64 编译器,您需要在 MATLAB 的命令窗口中运行以下命令: mex -setup 这将打开一个对话框,其中您可以选择安装 Mingw-w64 编译器。 在这个对话框中,选择 GCC(mingw64),然后点击OK。 在确认安装mingw64后,matlab 会自动下载并安装mingw64。 安装完成后,就可以使用mingw64编译mex文件了。 ### 回答2: matlab是一个强大的数学软件,在其官网下载并安装mingw-w64编译器后,可以更方便地对C和C++源代码进行编译和调试。以下是matlab安装mingw-w64编译器的详细过程: 1. 打开matlab软件,点击命令窗口中的“打开新窗口”按钮,进入MATLAB命令窗口。 2. 在MATLAB命令窗口输入“mex -setup”,按回车键。这会打开mex编译器的配置窗口。 3. 在mex编译器配置窗口中,选择“选项”下面的“C++编译器”选项,点击“浏览”按钮。 4. 在弹出的文件浏览器中,找到并选择mingw-w64编译器的安装目录,在路径栏中输入其路径,例如“C:\mingw-w64”(根据实际安装路径填写)。 5. 点击“确定”按钮,mex编译器的配置窗口会自动刷新,同时弹出一个警告窗口,点击“是”按钮确认安装。 6. 至此,mingw-w64编译器已经安装成功。在matlab命令窗口输入“mex -v”,可以查看mex编译器的详细信息,验证编译器的安装是否成功。 7. 在matlab的命令窗口中输入编译命令,例如“mex hello.cpp”,就可以对C或者C++编写的源文件进行编译了。将hello.cpp替换成真实的源代码文件名称即可。 总的来说,matlab安装mingw-w64编译器的过程并不难,只要注意正确安装即可。使用mingw-w64编译器可以让matlab做更多的事情,并且能够更高效地完成C和C++源代码的编译和调试任务。 ### 回答3: Matlab是一个功能强大的数学软件,可以用来完成各种数学计算和数据分析。当我们需要在Matlab中进行C++编程时,需要安装Mingw-w64编译器。 Mingw-w64编译器是一款免费的开源编译器,可以在Windows系统中编译C++和Fortran代码。在Matlab中使用Mingw-w64编译器可以实现编写高效的C++程序,并在Matlab中执行。下面是安装Mingw-w64编译器的具体步骤: 1. 下载Mingw-w64编译器 打开Mingw-w64编译器的官网(https://sourceforge.net/projects/mingw-w64/)下载对应的软件包,选择好操作系统和架构。 2. 安装Mingw-w64编译器 下载完成后,双击安装程序,按照提示完成安装。 3. 配置环境变量 进入控制面板,找到“系统和安全”-“系统”-“高级系统设置”-“环境变量”,在系统变量中添加“C:\mingw-w64\mingw64\bin”路径,将Mingw-w64编译器添加至系统PATH。 4. 配置Matlab环境 打开Matlab,进入“matlabroot\extern\lib\win64\mingw64\”路径,将Mingw-w64编译器的文件夹拷贝到该路径下,然后以管理员身份打开Matlab。 5. 编译C++程序 在Matlab命令窗口输入“mex -setup C++”,选择Mingw-w64编译器进行编译。然后输入“mex test.cpp”,即可编译出一个test.mexw64的文件。 以上就是matlab安装mingw-w64编译器的具体步骤,如果按照上述步骤操作仍然有问题,可以通过Matlab官方文档或者Google搜索解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值