Этот пример создает интерфейс MATLAB® к библиотеке matrixOperations C++ для 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