免費建站網(wǎng)站大全長沙網(wǎng)站推廣seo
目錄
語法
說明
示例
使用交錯式復矩陣 API 編譯 MEX 文件
編譯 C MEX 文件
顯示詳細編譯和故障排除信息
覆蓋默認編譯器開關選項
從多個源文件編譯 MEX 文件
使用通配符組合源文件
預覽編譯命令
創(chuàng)建并鏈接到單獨的對象文件
指定包含文件的路徑
指定庫文件的路徑
定義編譯器指令
編譯引擎應用程序
選擇 C 編譯器
鏈接命令選項
提示
編譯 MEX 函數(shù)或引擎應用程序
語法
mex filenamesmex filenames api option1 ... optionNmex -client engine filenamesmex -client engine filenames api option1 ... optionNmex -setup [lang]mex -setup -client engine [lang]
說明
????????mex?filenames?編譯一個或多個用?MATLAB 數(shù)據(jù) API?編寫的 C++ 源文件并將其鏈接到當前文件夾中的二進制 MEX 文件中。
?????????mex?filenames?api?option1 ... optionN?使用指定的?api?和可選的?option1 ... optionN?參數(shù)進行編譯。option1 ... optionN?參數(shù)補充或覆蓋默認?mex?編譯配置。
?????????mex -client engine?filenames?將使用?MATLAB 數(shù)據(jù) API?編寫的 C++ 源文件編譯到獨立的 MATLAB 引擎應用程序中。
?????????mex -client engine?filenames?api?option1 ... optionN?使用指定的?api?和可選的?option1 ... optionN?參數(shù)編譯引擎應用程序。
?????????mex -setup [lang]?顯示用于編譯 MEX 文件的給定語言的默認編譯器的有關信息。MATLAB 為每種支持的語言定義一個默認編譯器。
??????????mex -setup -client engine [lang]?選擇用來編譯引擎應用程序的編譯器。?
示例
使用交錯式復矩陣 API 編譯 MEX 文件
????????從 matlabroot/extern/examples 文件夾復制源代碼示例。
copyfile(fullfile(matlabroot,'extern','examples','mex','explore.c'),'.','f')
????????編譯該 MEX 文件。輸出顯示特定于編譯器的信息。
mex -R2018a explore.c
????????測試。
a = [1 3 5];
b = [5 3 1];
A = complex(a,b);
explore(A)
------------------------------------------------
Name: prhs[0]
Dimensions: 1x3
Class Name: double
------------------------------------------------(1,1) = 1 + 5i(1,2) = 3 + 3i(1,3) = 5 + 1i
編譯 C MEX 文件
????????將單個 C 程序?yprime.c?編譯為一個 MEX 文件。在路徑?c:\work?上創(chuàng)建一個可寫文件夾,并將其設置為當前文件夾。
[s,msg,msgid] = mkdir('c:\work');
if (isempty(msgid))mkdir('c:\work')
end
cd c:\work
????????從 matlabroot/extern/examples 文件夾復制源代碼示例。
copyfile(fullfile(matlabroot,'extern','examples','mex','yprime.c'),'.','f')
????????編譯該 MEX 文件。輸出顯示特定的編譯器的信息。
mex yprime.cBuilding with 'MinGW64 Compiler C '.
MEX completed successfully.
????????測試。
T=1;
Y=1:4;
yprime(T,Y)
ans =2.0000 8.9685 4.0000 -1.0947
顯示詳細編譯和故障排除信息
????????要顯示編譯和鏈接命令及其他用于故障排除的信息,請使用詳細模式。
mex -v -compatibleArrayDims yprime.c
????????輸出顯示特定的平臺和編譯器的信息。
覆蓋默認編譯器開關選項
????????通過將值?-Wall?追加到現(xiàn)有編譯器標識符來編譯?yprime.c?對應的 MEX 文件。因為該值包括空格字符,所以必須界定該字符串;界定所用字符取決于平臺。
????????在 MATLAB 提示符處,使用MATLAB單引號 (')。
mex -v COMPFLAGS='$COMPFLAGS -Wall' yprime.c
????????對于基于 gcc/g++ 的 MinGW-w64 編譯器,使用 Linux??編譯器標識符。
mex -v CXXFLAGS='$CXXFLAGS -Wall' yprime.c
????????在 Windows??命令提示符處,使用雙引號 ("
)。
mex -v COMPFLAGS="$COMPFLAGS -Wall" yprime.c
????????在?macOS?和 Linux 上的 Shell 命令行處,使用單引號 ('
)。
mex -v CFLAGS='$CFLAGS -Wall' yprime.c
從多個源文件編譯 MEX 文件
????????MEX 文件示例 fulltosparse 由兩個Fortran源文件loadsparse.F和fulltosparse.F組成。要運行此示例,需要在系統(tǒng)上安裝支持的Fortran編譯器。將源文件復制到當前文件夾。
copyfile(fullfile(matlabroot,'extern','examples','refbook','loadsparse.F'),'.','f')
copyfile(fullfile(matlabroot,'extern','examples','refbook','fulltosparse.F'),'.','f')
????????編譯 fulltosparse MEX文件。MEX文件名為 fulltosparse,這是因為 fulltosparse.F 是命令行上的第一個文件。輸出包含特定的編譯器的信息。
mex -largeArrayDims fulltosparse.F loadsparse.FBuilding with 'Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2012'.
MEX completed successfully.
????????測試。
full = eye(5);
spar = fulltosparse(full)
spar =1,1 12,2 13,3 14,4 15,5 1
使用通配符組合源文件
????????將當前文件夾中的所有C源文件組合為 MEX 文件 mymex。使用 -output 選項控制 MEX 文件的名稱。
mex -output mymex *.c
預覽編譯命令
????????在不執(zhí)行命令的情況下,使用 -n 選項可預覽編譯命令詳細信息。輸出包含特定的平臺和編譯器的信息。
mex -n yprime.c
創(chuàng)建并鏈接到單獨的對象文件
????????可以鏈接到與源 MEX 文件分開編譯的對象文件。MEX 文件示例 fulltosparse 由兩個 Fortran 源文件組成。fulltosparse?文件是入口例程(包含?mexFunction?子例程),loadsparse?包含計算例程。
????????要運行此示例,需要在系統(tǒng)上安裝支持的 Fortran 編譯器。將計算子例程復制到當前文件夾。
?
copyfile(fullfile(matlabroot,'extern','examples','refbook','loadsparse.F'),'.','f')?
????????編譯子例程,并將對象文件放在單獨的文件夾 c:\objfiles 中。
mkdir c:\objfiles
mex -largeArrayDims -c -outdir c:\objfiles loadsparse.FBuilding with 'Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2012'.
MEX completed successfully.
????????將入口子例程復制到當前文件夾。編譯 loadsparse 對象文件并與之鏈接。
copyfile(fullfile(matlabroot,'extern','examples','refbook','fulltosparse.F'),'.','f')
mex -largeArrayDims fulltosparse.F c:\objfiles\loadsparse.objBuilding with 'Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2012'.
MEX completed successfully.
指定包含文件的路徑
????????要指定包含 MATLAB LAPACK 庫子例程以處理復數(shù)例程的路徑,請使用 -I 選項。要使用這些子例程,MEX 文件必須訪問頭文件 fort.h。將 matrixDivideComplex.c 示例復制到當前文件夾。
copyfile(fullfile(matlabroot,'extern','examples','refbook','matrixDivideComplex.c'),'.','f')
????????通過串聯(lián) '-I' 和 fort.h 文件的路徑來創(chuàng)建 -I 參數(shù)。
ipath = ['-I' fullfile(matlabroot,'extern','examples','refbook')];
????????為 LAPACK 庫文件和文件 fort.c 的名稱和路徑創(chuàng)建變量,這些變量包含復數(shù)處理例程。
lapacklib = fullfile(matlabroot,'extern','lib',computer('arch'),'microsoft','libmwlapack.lib');
fortfile = fullfile(matlabroot,'extern','examples','refbook','fort.c');
????????編譯該 MEX 文件。
mex('-v','-R2017b',ipath,'matrixDivideComplex.c',fortfile,lapacklib)
指定庫文件的路徑
????????通過使用?-L?和?-l?選項指定?libmwlapack.lib?庫,在 Windows 平臺上編輯?matrixDivide.c?示例。庫文件位于文件夾?matlabroot\extern\lib\arch\microsoft?中。
????????將?matrixDivide.c?示例復制到當前文件夾。
copyfile(fullfile(matlabroot,'extern','examples','refbook','matrixDivide.c'),'.','f')
????????捕獲 matlabroot 的值。
matlabroot
ans =C:\Program Files\MATLAB\R2014a
????????捕獲 arch 的值。
computer('arch')
ans =win64
????????要編譯 MEX 文件,請將 matlabroot 和 arch 的值復制到 mex 命令中,如以下語句所示。
mex '-LC:\Program Files\MATLAB\R2014a\extern\lib\win64\microsoft'...-llibmwlapack matrixDivide.c
????????必須使用 ' 字符,這是因為路徑中的 \Program Files 包括空格。
定義編譯器指令
????????mxcreatecharmatrixfromstr.c 示例使用 #define 符號 SPACE_PADDING 來確定要在矩陣的字符向量之間使用的字符。要設置該值,請使用 -D 選項編譯 MEX 文件。將示例復制到當前文件夾。
copyfile(fullfile(matlabroot,'extern','examples','mx','mxcreatecharmatrixfromstr.c'),'.','f')
????????將 SPACE_PADDING 指令設置為在值之間添加空格。
mex mxcreatecharmatrixfromstr.c -DSPACE_PADDINGBuilding with 'MinGW64 Compiler C '.
MEX completed successfully.
編譯引擎應用程序
????????將 engwindemo.c 引擎示例復制到當前文件夾。
copyfile(fullfile(matlabroot,'extern','examples','eng_mat','engwindemo.c'),'.','f')
mex -client engine engwindemo.c
????????如果在 Windows 平臺上運行,則必須先將 MATLAB 注冊為 COM 服務器。運行示例。
!engwindemo
選擇 C 編譯器
mex -setup
?????????MATLAB 根據(jù)支持和兼容的編譯器列表顯示適用的版本和系統(tǒng)的選項。?
鏈接命令選項
????????要向 mex 鏈接命令添加選項,請使用 LINKFLAGS 命令行選項。例如,要指定在 Windows 上編譯 mymex.c 時可執(zhí)行文件的環(huán)境,請鍵入:
mex -v LINKFLAGS='%LINKFLAGS% /subsystem:windows' mymex.c
????????語言,指定為下列不區(qū)分大小寫的值之一。
C | C 編譯器,包括 C++。 |
C++ ?或?CPP | C++ 編譯器 |
Fortran | Fortran 編譯器。 |
提示
-
可以從以下位置運行 mex:
-
MATLAB 命令行窗口
-
Windows 系統(tǒng)提示符
-
macOS?終端
-
Linux Shell
-
-
MEX 文件與平臺相關的擴展名
平臺 二進制 MEX 文件擴展名 Linux(64 位)
mexa64
Apple?Mac(64 位)
mexmaci64
Windows(64 位)
mexw64
-
要使用 mex 為獨立 MATLAB 引擎應用程序編譯可執(zhí)行文件,使用 -client engine 選項。
-
mex 命令不支持包含雙引號 (") 字符的文件夾名稱。