[改写] matlab转C/C++ 的混合编程 (beta版)

由于项目需要,我们需要把用matlab写的语音处理函数转换为C/C++能够链接上的库文件,从而接到C/C++的工程中去。这听起来简单,但是做起来却比这复杂得多,本篇博文是一个小小的总结,主要内容改写自我们组mm的博文,我的原创的地方主要是移植中遇到的问题的解决。

mm的博文地址是:http://bingxinye1.blog.163.com/blog/static/1687970982011839213683/

我用的matlab版本是:7.8.0(R2009a)

以下是正文:

步骤一:Matlab编译环境设置(一)

1、在Matlab命令窗口中输入 mbuild -setup

2、命令窗口出现:

Please choose your compiler for building standalone MATLAB applications:
Would you like mbuild to locate installed compilers [y]/n?

选择输入:y

3、命令窗口出现:(注:有可能因为个人电脑安装别的编译器不同,显示有所区别)

Select a compiler:
[1] Lcc-win32 C 2.4.1 in C:\PROGRA~1\MATLAB\R2009a\sys\lcc
[2] Microsoft Visual C++ 6.0 in D:\Program Files\Microsoft Visual Studio

[0] None

Compiler:

选择输入:2

4、命令窗口显示:

Please verify your choices:

Compiler: Microsoft Visual C++ 6.0
Location: D:\Program Files\Microsoft Visual Studio (是电脑VC的位置)

Are these correct [y]/n?

选择输入:y

5、命令窗口显示:

Trying to update options file: C:\Documents and Settings\Administrator\Application

Data\MathWorks\MATLAB\R2009a\compopts.bat

From template: C:\PROGRA~1\MATLAB\R2009a\bin\win32\mbuildopts\msvc60compp.bat

Done . . .

步骤二:Matlab编译环境设置(二)

继续在命令窗口中输入:mex -setup

接下来的选择和“步骤一”的一样。

步骤三:对VC编译环境进行设置

1、打开Microsoft Visual C++ 6.0 。新建一个基于对话框的MFC工程。这里命名为Huatu

(File ->New ->MFC AppWizard[exe] (Project name:Huatu) ->dialog based ->Finish)

选择:Tools ->Options ->Directories->Show directories for

1)、选择Include files 添加文件路径 C:\PROGRAM FILES\MATLAB\R2009A\EXTERN\INCLUDE(注意:前面的路径随

个人matlab安装路径而异)

2)、选择Library files 添加库文件 C:\PROGRAM FILES\MATLAB\R2009A\EXTERN\LIB

C:\PROGRAM FILES\MATLAB\R2009A\EXTERN\LIB\WIN32\MICROSOFT

步骤四:编写和编译.m文件

在和C++连接前,最好先检验程序的正确性。

文件名为:huatu_test.m

function y= huatu_test()
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
x=-10:0.1:10;
y=sin(x);
plot(x,y,'*');
end


步骤五:把.m文件转换成.dll文件

1、在Matlab命令窗口中输入:mcc -t -h -L C -W lib:dllhuatu_test-T link:lib huatu_test.m(红色字体部分可根据自己的喜好命名)

2、生成的文件中我们只要:dllhuatu_test.dll dllhuatu_test.h dllhuatu_test.lib 。把它们拷贝到project Huatu文件夹内。

注意,生成文件真正有用的是这三个:文件名.h, 文件名.lib,文件名.dll,.h文件是函数说明,.lib和.dll文件一起构成动态链接库。

步骤六:嵌入你的C/C++项目

在你的C/C++项目中包括刚才生成的.h文件,并且把.lib和.dll文件放在工作目录下并且包含,另外,还要包含matlab的两个.lib文件mclmcrrt.lib mclmcr.lib。总体的格式如下(另外,如果你用的是vs,那么要进行工作目录的设置,使得你的lib文件可被访问到):

#include "Test.h"//生成的.h文件
#pragma comment(lib,"Test.lib")
#pragma comment(lib,"mclmcrrt.lib")
#pragma comment(lib,"mclmcr.lib")

至于参数的传递在此不多说,简单的调用示例如下:

if(!dllhuatu_testInitialize())
{
MessageBox("No dll is found!");
}
mxArray *y=mxCreateDoubleMatrix(1,1,mxREAL);

mlfHuatu_test(1,&y);
dllhuatu_testTerminate();

步骤七:发行你的程序

(未完待续)

可能遇到的问题:

问题一:I18n:MissingICUData - ICU data not found.

解法:(未完待续)

问题二:I18n:LocaleDatabaseNotFound - Cannot find the MATLAB locale database.The MATLAB process default locale is set to "en_US.US-ASCII".

解法:在matlab目录下寻找icudt38l.dat或类似文件,放到exe同一个目录下即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值