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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM