Matlab调用动态链接库

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Matlab调⽤动态链接库
matlab帮助⽂档⾥有详细⽂档Call Functions in shared Libaries
什么是共享库
共享库是⼀组函数的集合,在程序运⾏期间可以动态加载。

共享库中的函数可以⽤不同的语⾔实现,但只要这些函数提供了C语⾔接⼝,那Matlab就⽀持该共享库,⽽且Matlab ⽀持在不同平台下链接共享库。

平台
共享库⽂件扩展名
Micsoft Windows动态链接库⽂件.dll
UNIX and Linus共享⽬标⽂件.so
Apple Macintosh动态共享⽂件.dylib
共享库必须要提供⼀个头⽂件,⽤来声明共享库中的函数。

函数签名中明确了函数的名称,参数的个数和类型。

你还需要⼀个已安装好的matlab⽀持的C编译器。

matlab可以通过命令⾏接⼝调⽤外部共享库中的函数。

这个接⼝允许你将⼀个外部共享库加载到Matlab内存中,并调⽤共享库中的函数。

虽然matlab语⾔和C语⾔差异较⼤,但是通常你可以直接传递⼀个类型到C函数中,不需要做转换,因为matlab在后⾯已经帮你做好了这部分⼯作。

当你使⽤完了共享库,有个重点是你需要卸载共享库以释放内存。

加载和卸载共享库
为了让matlab调⽤共享库中的函数,⾸先需要将共享库加载到内存中去,加载完之后,你可以获取库中的函数信息和直接在matlab中调⽤这些函数,当不再需要共享库时,还需要卸载共享库来维持内存使⽤情况。

加载共享库到matlab中,使⽤loadlibray函数,函数语法是:
loadlibrary('shrlib','hfile')
其中shrlib表⽰共享库⽂件的名称,hfile表⽰包含函数声明的头⽂件名称。

⽤unloadlibrary命令去卸载共享库并释放内存。

命令语法:
unloadlibrary libname
其中libname表⽰共享库名称。

查看共享库函数
在命令⾏窗⼝中查看函数
为了在命令⾏窗⼝中显⽰共享库中的函数信息,可以⽤libfunctions,例如,查看libmx共享库中有哪些可⽤的函数,可以输⼊如下命令:
if not(libisloaded('libmx'))
hfile = [matlabroot '\extern\include\matrix.h'];
loadlibrary('libmx',hfile)
end
libfunctions libmx
matlab命令⾏窗⼝中显⽰:
MATLAB displays (in part):
Functions in library libmx:
mxAddField mxGetScalar
mxArrayToString mxGetString_730
mxCalcSingleSubscript_730 mxGetUserBits
mxCalloc mxIsCell
mxCreateCellArray_730 mxIsChar
mxCreateCellMatrix_730 mxIsClass
. .
. .
. .
如果想看具体的函数签名,在命令后加-full指令,这个选项能够显⽰matlab调⽤共享库中函数的语法,其中函数⽤的参数列表和返回类型均为matlab类型,⽽不是C版本的类型。

可输⼊如下命令:
list = libfunctions('libmx','-full')
matlab显⽰(部分):
MATLAB displays (in part):
list =
'[int32, MATLAB array, cstring] mxAddField(MATLAB array, cstring)'
'[cstring, MATLAB array] mxArrayToString(MATLAB array)'
'[uint64, MATLAB array, uint64Ptr] mxCalcSingleSubscript_730(
MATLAB array, uint64, uint64Ptr)'
'lib.pointer mxCalloc(uint64, uint64)'
'[MATLAB array, uint64Ptr] mxCreateCellArray_730(uint64, uint64Ptr)'
'MATLAB array mxCreateCellMatrix_730(uint64, uint64)'
.
.
.
在窗⼝中查看函数
为了得到共享库中的函数信息,还可以⽤libfunctionview函数,matlab将会打开⼀个窗⼝显⽰如下信息:
Heading描述
Return Type函数返回类型
Name函数名称
Arguments输⼊参数的有效类型
查看libmx共享库中的函数信息,可以输⼊如下命令:
if not(libisloaded('libmx'))
hfile = [matlabroot '\extern\include\matrix.h'];
loadlibrary('libmx',hfile)
end
libfunctionsview libmx
matlab会弹出如下窗⼝:
需要注意的是,上述的参数类型和函数返回类型均为matlab类型,不是C版本类型。

调⽤共享库中函数
当加载完共享库后,可以⽤calllib函数来调⽤共享库中的函数了,函数语法为:
calllib('libname','funcname',arg1,...,argN)
指定共享库名称,函数名称,如果有要求的话,还包括所有传递到函数中参数。

下⾯的实例可以调⽤libmx库中的函数。

⾸选加载共享库:if not(libisloaded('libmx'))
hfile = [matlabroot '\extern\include\matrix.h'];
loadlibrary('libmx',hfile)
end
创建⼀个数组y:
y = rand(4,7,2);
调⽤共享库中的函数,获取数组y的信息:
calllib('libmx','mxGetNumberOfElements',y)
matlab显⽰数组的个数:
ans =
56
调⽤共享库中的函数,获取数组y的信息:
calllib('libmx','mxGetClassID',y)
matlab显⽰数组的类型:
ans =
mxDOUBLE_CLASS。

相关文档
最新文档