Этот пример создает 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
и его местоположение.
Путь к папке, содержащей файлы include, с помощью '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;
Просмотр функциональности
Хотя некоторые конструкции требуют дополнительного определения, можно просмотреть доступные функциональные возможности. Если этой функциональности достаточно для ваших нужд, можно продолжить выполнение шага Build Library Interface. В противном случае перейдите к шагу Задать отсутствующие конструкции.
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 Interface to C++ Shared Library.
clibgen.generateLibraryDefinition