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

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

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

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

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

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

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

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

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

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

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

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

% Replace user 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';
v = true;
clibgen.generateLibraryDefinition(fullfile(hppPath,hppFile),...
'IncludePath', iPath,... 
'Libraries', fullfile(libPath,libFile),... 
'PackageName', myPkg,...
'ReturnCArrays',false,...
'Verbose',v)

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

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

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", "output", "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 
'H:\Documents\MATLAB\publisher\matrixexample\myPkg'.
To use the library, add the interface file folder to the MATLAB path.

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

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

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

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

Похожие темы