技术蛀虫

导航

matalb7与VC2008混合编程DLL方法(一)m函数打包成

本帖介绍将matalb7的m函数打包成dll库的方法,具体步骤如下:

 

1.编译器设置

因为打包的m函数dll库要被VC调用,因此,在打包过程中,需要将matlab7的编译器设置为VC所用的编译器。具体设置方法如下:

(1)在matlab7的Command Window中输入命令

mbuild -setup

matlab7将给出如下提示:

Please choose your compiler for building standalone MATLAB applications:

Would you like mbuild to locate installed compilers [y]/n?

这时,可以输入y或n,下面分别介绍输入y和n的情况。

(2)如果输入y,matlab将给出可选编译器,供选择,提示如下:

Select a compiler:
[1] Lcc-win32 C 2.4.1 in D:\PROGRA~1\MATLAB\R2010b\sys\lcc
[2] Microsoft Visual C++ 2008 SP1 in D:\Program Files\Microsoft Visual Studio 9.0
[3] Microsoft Visual C++ 6.0 in D:\Program Files\Microsoft Visual Studio
[0] None

 

Compiler:

这时在Compiler: 后面输入1、2、3或0就可以设置编译器了,其中:1是matlab7默认的编译器,2是vc2008的编译器,3是VC6.0的编译器。

在我们的应用中,编译matlab函数的dll是为了VC程序调用,因为我们选择编译器2或3就可以了。

输入编译器对应的数字后,matlab给出如下提示:

Please verify your choices:

Compiler: Microsoft Visual C++ 2008 SP1
Location: D:\Program Files\Microsoft Visual Studio 9.0

Are these correct [y]/n?

确认无误后,输入y就可以了。

(3)如果输入n,matlab将给出比输入y时更多的可选编译器,供选择,提示如下:

Select a compiler:
[1] Lcc-win32 C 2.4.1
[2] Microsoft Visual C++ 6.0
[3] Microsoft Visual C++ 2005 SP1
[4] Microsoft Visual C++ 2008 Express
[5] Microsoft Visual C++ 2008 SP1
[6] Microsoft Visual C++ 2010
[7] Microsoft Visual C++ 2010 Express

[0] None

Compiler:

与情况(2)相同通过输入编译器的编号来选择编译器就可以了。

在实际应用中,我们按上述(2)所述的方法操作就可以了。

 

2.打包*.dll库的方法

(1)打包成c库

mcc -W lib:你的库名称 -T link:lib m函数1的文件名 m函数2的文件名 m函数3的文件名

(2)打包成c++库

mcc -W cpplib:你的库名称 -T link:lib m函数1的文件名 m函数2的文件名 m函数3的文件名

 

需要注意:

a.库名称的开头最好是lib开头,这样不会产生警告(帮助里这么说的);

b.m函数的文件名中不包含matlab文件的后缀“.m”;

c.上述方法将把多个m函数打包在一个*.dll库中。

 

(4)库打包后所形成文件的存放位置

a.打包后形成的所有文件中,只有4个文件是我们在VC编程时需要用到的,它们的文件名称是1.中的“你的库名称”,文件后缀名分别是:*h,*.lib,*.dll,*.ctf

b.打包后的相关文件的存放位置(非常重要,需要注意)

(b.1)*h和*.lib应放在VC工程文件夹下,VC对程序进行编译连接,生成Debug和Release文件夹及其下的目标代码时使用.这两个文件放错位置,VC程序编译连接时会提示错误。

(b.2)*.dll,*.ctf应放在Debug和Release文件夹下,*.exe程序在执行使需要它们,否则即使程序能够编译连接形成*.exe,但是当程序需要用到matlab的DLL是还是会提示出错的,这个错误只有当实际运行你的程序时才会产生。

 

3.mcc 指令在matlab help中的MATLAB Compiler部分有讲解

 

4. 打包过程中可能出现的异常及处理方法

(1)打包过程中,产生了警告 No match builtin function available for set_param.bi

解决办法在这个网址http://www.ilovematlab.cn/viewthread.php?tid=19463里有介绍,下面将其中wetyboy给出方法写在下面,这个方法非常奏效:

 


解决办法:

To resolve this issue, you should modify the following file:

$MATLAB/toolbox/compiler/deploy/matlabrc.m

(where $MATLAB = the MATLAB root directory on your machine)
Comment out the following lines (numbers 81 and 82) that have a call to SET_PARAM.
set_param(0,'PaperType',defaultpaper);
set_param(0,'PaperUnits',defaultunits);
When you are finished, save these changes and issue the following command at the MATLAB command prompt:


rehash toolboxcache

("Comment out "means to add a smybol "%"to the front of a sentance,)

英语的意思就是把这两行的命令给注释掉,然后在主窗口中,输入 rehash toolboxcache ,然后Enter 就可以了。我试过的!

这样做以后,如果不把matlabrc.m再改回去会对其它matlab程序造成什么影响,我还没试过。

 

(2)出现错误提示

??? Error using ==> mbuild
Unable to complete successfully

??? Error: An error occurred while shelling out to mbuild (error code = 1).
Unable to build executable (specify the -v option for more information).

出现该错误的原因是,在用mcc -W cpplib指令打包库之前没有按照步骤1设置为vc的编译器,而采用matlab编译器在打包库时会产生这种错误。

posted on 2012-07-19 18:26  技术蛀虫  阅读(306)  评论(0编辑  收藏  举报