预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

matlabcompiler与c语言混合编程 经过一个多月的努力,在老师的帮助和自己的琢磨之下,终于对vc与matlab的混合编程有所了解。且举一例。 首先要在自己的matlab7.0上安装MEX和mBuilder,安装方法是在matlab命令窗口中输入mex-setup,按照一系列的步骤安装下去。然后再在命令窗口中输入mbuilder-setup,同样的方法就可以安装mbuilder。在matlab中打开一个空的m文件,向里面写下列代码,并将其保存为zhengtaifenbuhanshu.m: functiony=zhengtaifenbuhanshu(x,u,d) %x为变量,u为均值,d为方差 y=normcdf(x,u,d); 我的目的是在c语言中可以调用matlab中的正态分布函数。这个函数有三个输入参数,一个输出参数。然后在matlab命令行中打入:mcc-lzhengtaifenbuhanshu.m-odllnormcdf。 这样就生成c共享(动态)库文件。其中zhengtaifenbuhanshu.m是要编译的m文件,最后编译的名称为dllnormcdf。-o表示要编译成的名字,如果没有-o,则编译后生成的文件名是与第一个要编译的文件名一致,就是这里的zhengtaifenbuhanshu。上面命令的作用是将zhengtaifenbuhanshu.m函数生成名字为dllnormcdf的c语言动态库。注意编译的路径,如果zhengtaifenbuhanshu是你放在一个matlab中work的一个包中,那么matlab主窗口上面的CurrentDirectory要选择好zhengtaifenbuhanshu.m这个m文件所在的地方。按回车编译成功后,你会在编译的文件夹(默认的是work中)中看到多了几个生成的文件: dllnormcdf.c dllnormcdf.ctf dllnormcdf.dll dllnormcdf.exp dllnormcdf.exports dllnormcdf.h dllnormcdf.lib dllnormcdf_mcc_component_data.c 在生成的文件中,dllnormcdf.h文件是编译结果函数库的函数声明头文件,而dllnormcdf.lib文件是最终用户在编译自己的可执行应用程序所必须的库文件,dllnormcdf.dll 文件就是最终用户的可执行应用程序运行时所需要的动态库。dllnormcdf.ctf是压缩文件,内容包含了所有与执行应用程序相关的MATLAB文件,dllnormcdf_mcc_component_data.c是数据文件,它包含了路径信息、MCR信息以及密钥等,dllnormcdf.exports文件中包含了所有被编译函数的声明符号,这些函数的原型都包含在了头文件dllnormcdf.h中。 在vc中新建一个工程,这里我是用c语言作为例子的。然后将在matlab中生成的所有文件dllnormcdf.c、dllnormcdf.ctf、dllnormcdf.dll、dllnormcdf.exp、dllnormcdf.exports、dllnormcdf.h、dllnormcdf.lib、dllnormcdf_mcc_component_data.c都拷贝到新建工程的文件夹中。点击vc窗口的FileView,然后右键点击HeaderFiles,选择AddFilestoFolder…,将刚才拷贝过去的头文件dllnormcdf.h选择后,按ok将其添加进去。这样就看到HeaderFiles中多了一个头文件。双击头文件可以看到如下代码: #ifndef__dllnormcdf_h #define__dllnormcdf_h1 #ifdefined(__cplusplus)&&!defined(mclmcr_h)&&defined(__linux__) #pragmaimplementation"mclmcr.h" #endif #include"mclmcr.h" #ifdef__cplusplus extern"C"{ #endif externbooldllnormcdfInitializeWithHandlers(mclOutputHandlerFcnerror_handler, mclOutputHandlerFcnprint_handler); externbooldllnormcdfInitialize(void); externvoiddllnormcdfTerminate(void); externvoidmlxZhengtaifenbuhanshu(intnlhs,mxArray*plhs[], intnrhs,mxArray*prhs