Опубликуйте интерфейс к разделяемой библиотеке C++ по Linux

Этот пример создает интерфейс MATLAB® к библиотеке matrixOperations C++ для Linux®. Процесс включает:

  • Сгенерируйте файл определения (definemyPkg.mlx).

  • Измените файл определения, чтобы завершить любые определения, которые MATLAB не может автоматически преобразовать.

  • Создайте интерфейс библиотеки.

Для получения дополнительной информации смотрите Сборку Интерфейс MATLAB к Библиотеке C++.

MATLAB обеспечивает библиотеку C++ и заголовочные файлы для вас, чтобы использовать в этом примере. Файлы библиотеки находятся в этой папке и ее подпапках:

fullfile(matlabroot,'extern','examples','cpp_interface')

Сгенерируйте файл определения

Первый шаг для генерации интерфейса готовит необходимые папки и файлы и вызов clibgen.generateLibraryDefinition сгенерировать файл определения.

Проверьте поддерживаемый компилятор C++

Чтобы создать интерфейс, используйте тот же компилятор, который использовался, чтобы создать библиотеку C++.

mex -setup cpp

Создайте папку издателя

Создайте папку для файла интерфейса MATLAB.

user = "myname"; % Replace "myname" with your user name
pubPath = "/mathworks/home/"+user+"/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. В данном примере поменяйте имя на myPkg.

myPkg = 'myPkg';

Вызвать clibgen.generateLibraryDefinition

Чтобы создать интерфейс, необходимо задать:

  • Имя заголовочного файла matrixOperations.hpp и его местоположение.

  • Путь к папке, содержащей включать файлы, с помощью 'IncludePath' аргумент.

  • Название и местоположение совместно использованного файла библиотеки matrixOperations.lib, использование 'Libraries' аргумент.

Опционально, можно задать:

  • Имя библиотеки, с помощью 'PackageName' аргумент.

  • Отобразите сообщения генерации, с помощью 'Verbose' аргумент.

myPkg = 'myPkg'
clibgen.generateLibraryDefinition(fullfile(hppPath,hppFile),...
'IncludePath', iPath,... 
'Libraries', fullfile(libPath,libFile),... 
'PackageName', myPkg,...
'ReturnCArrays',false,... % treat output as MATLAB arrays
'Verbose',true)

Подтвердите библиотеку.

definemyPkg

Просмотрите функциональность

Несмотря на то, что некоторые построения требуют дополнительного определения, можно просмотреть доступную функциональность. Если эта функциональность достаточна для ваших потребностей, то можно продолжить шаг Интерфейса Библиотеки Сборки. В противном случае продолжите шаг, Задают Недостающие Построения.

summary(definemyPkg)
MATLAB Interface to myPkg1 Library

Class clib.myPkg1.Mat

  Constructors:
    clib.myPkg1.Mat()
    clib.myPkg1.Mat(clib.myPkg1.Mat)

  Methods:
    uint64 getLength()

  No Properties defined

Functions
  clib.myPkg1.updateMatByX(clib.myPkg1.Mat,int32)

Задайте Недостающие построения

Чтобы задать недостающие построения, щелкните по ссылке в generateLibraryDefinition выходной сигнал, чтобы отредактировать определения в definemyPkg.mlx. Для получения информации о редактировании этого файла и примеров для определения аргументов, смотрите, Задают Недостающую информацию для Подписей MATLAB.

  1. Ищите файл определения setMat метод и некомментарий операторы, задающие его. Задавать src аргумент, в этом defineArgument оператор, замена <SHAPE> с "len".

    defineArgument(setMatDefinition, "src", "clib.array.myPkg.Int", "input", "len");
  2. В методе getMat, задайте RetVal выведите, заменив <SHAPE> с "len".

    defineOutput(getMatDefinition, "RetVal", "int32", "len");
  3. В методе copyMat, задайте dest аргумент, заменяя <SHAPE> с "len".

    defineArgument(copyMatDefinition, "dest", "clib.array.myPkg.Int", "input", "len");
  4. В функциональном addMat, задайте mat аргумент в функциональном addMat заменяя <SHAPE> с 1.

    defineArgument(addMatDefinition, "mat", "clib.myPkg.Mat", "input", 1);
  5. В функциональном updateMatBySize, задайте arr аргумент, заменяя <SHAPE> с "len".

    defineArgument(updateMatBySizeDefinition, "arr", "clib.array.myPkg.Int", "input", "len");

Сохраните и закройте файл определения.

Создайте интерфейс библиотеки

Создайте файл интерфейса MATLAB myPkgInterface.dll.

build(definemyPkg)
Building interface file 'myPkgInterface.dll'.
Interface file 'myPkgInterface.dll' built in folder 
'/mathworks/home/myname/MATLAB/publisher/matrixexample/myPkg'.
To use the library, add the interface file folder to the MATLAB path.

Обязательно щелкните по ссылке в сообщении, чтобы добавить интерфейсный файл в путь.

Протестируйте интерфейс

Чтобы протестировать интерфейс, смотрите Вызов функций в Интерфейсе Linux на C++ Разделяемая Библиотека.

Смотрите также

Похожие темы