您的位置:首页 > 编程语言 > MATLAB

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

2011-10-15 15:25 351 查看
由于项目需要,我们需要把用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();

步骤七:发行你的程序

(未完待续)

可能遇到的问题:

问题一:[b]I18n:MissingICUData - ICU data not found.[/b]

解法:(未完待续)

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

解法:在matlab目录下寻找icudt38l.dat或类似文件,放到exe同一个目录下即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: