В этом примере создается интерфейс MATLAB ® с библиотекой C++matrixOperations для Linux ®. Процесс включает в себя:
Создать файл определения (definematrixlib.mlx).
Измените файл определения, чтобы завершить любые определения, которые MATLAB не может автоматически преобразовать.
Создайте интерфейс библиотеки.
Дополнительные сведения см. в разделе Создание интерфейса MATLAB к библиотеке C++.
MATLAB предоставляет библиотеку C++ и заголовочные файлы для использования в этом примере. Файлы находятся в этой папке и ее подпапках:
fullfile(matlabroot,'extern','examples','cpp_interface');
Первый шаг для создания интерфейса - подготовка необходимых папок и файлов и вызов clibgen.generateLibraryDefinition для создания файла определения.
Проверка поддерживаемого компилятора C++
Для построения интерфейса используйте тот же компилятор, который использовался для построения библиотеки C++.
mex -setup cpp
Создать папку издателя
Создайте папку для файла интерфейса MATLAB.
pubPath = "~/MATLAB/publisher/matrixexample/"; if ~isfolder(pubPath) mkdir(pubPath) end cd(pubPath)
Идентификация файлов библиотеки C++
Определите имена и пути к артефактам библиотеки C++.
productPath = fullfile(matlabroot,'extern','examples','cpp_interface'); libPath = fullfile(productPath,'glnxa64'); % Header file name hppFile = 'matrixOperations.hpp'; % Full path to folder containing all header files hppPath = productPath; % Full path to folder containing include files iPath = hppPath; % Library file name libFile = 'libmwmatrixOperations.so';
Назовите интерфейс
По умолчанию MATLAB создает интерфейс с именем matrixOperations. В этом примере измените имя на matrixlib.
libname = "matrixlib";Звонить clibgen.generateLibraryDefinition
Для создания интерфейса необходимо указать:
Имя файла заголовка matrixOperations.hpp и его расположение.
Путь к папке, содержащей файлы включения, с помощью 'IncludePath' аргумент.
Имя и расположение файла библиотеки matrixOperations.lib, с использованием 'Libraries' аргумент.
При необходимости можно:
Переименование библиотеки с помощью 'PackageName' аргумент.
Просмотр сообщений генерации с помощью 'Verbose' аргумент.
clibgen.generateLibraryDefinition(fullfile(hppPath,hppFile),... 'IncludePath', iPath,... 'Libraries', fullfile(libPath,libFile),... 'PackageName', libname,... 'ReturnCArrays',false,... % treat output as MATLAB arrays 'Verbose',true)
Проверьте библиотеку.
definematrixlib;
Просмотр функциональных возможностей
Хотя некоторые конструкции требуют дополнительного определения, можно просмотреть доступные функциональные возможности. Если эта функциональность достаточна для удовлетворения потребностей пользователя, можно перейти к шагу «Создание интерфейса библиотеки». В противном случае перейдите к шагу «Определение отсутствующих конструкций».
summary(definematrixlib)
MATLAB Interface to matrixlib Library
Class clib.matrixlib.Mat
Constructors:
clib.matrixlib.Mat()
clib.matrixlib.Mat(clib.matrixlib.Mat)
Methods:
uint64 getLength()
No Properties defined
Functions
clib.matrixlib.updateMatByX(clib.matrixlib.Mat,int32)Чтобы определить отсутствующие конструкции, щелкните ссылку в generateLibraryDefinition выводимое сообщение для редактирования определений в definematrixlib.mlx. Сведения о редактировании этого файла и примеры указания аргументов см. в разделе Определение отсутствующей информации для сигнатур MATLAB.
Поиск в файле определения для setMat метод и раскомментируют определяющие его операторы. Для определения src аргумент, в этом defineArgument оператор, заменить <SHAPE> с "len".
defineArgument(setMatDefinition, "src", "clib.array.matrixlib.Int", "input", "len");
В методе getMat, определите RetVal вывод путем замены <SHAPE> с "len".
defineOutput(getMatDefinition, "RetVal", "int32", "len");
В методе copyMat, определите dest аргумент заменой <SHAPE> с "len".
defineArgument(copyMatDefinition, "dest", "clib.array.matrixlib.Int", "input", "len");
В функции addMat, определите mat аргумент в функции addMat заменой <SHAPE> с 1.
defineArgument(addMatDefinition, "mat", "clib.matrixlib.Mat", "input", 1);
В функции updateMatBySize, определите arr аргумент заменой <SHAPE> с "len".
defineArgument(updateMatBySizeDefinition, "arr", "clib.array.matrixlib.Int", "input", "len");
Сохраните и закройте файл определения.
Создание файла интерфейса MATLAB matrixlibInterface.dll.
build(definematrixlib)
Building interface file 'matrixlibInterface.dll'. Interface file 'matrixlibInterface.dll' built in folder 'MATLAB/publisher/matrixexample/matrixlib'. To use the library, add the interface file folder to the MATLAB path.
Обязательно щелкните ссылку в сообщении, чтобы добавить файл интерфейса к пути.
Для проверки интерфейса см. раздел Функции вызова в интерфейсе Linux к общей библиотеке C++.
clibgen.generateLibraryDefinition