exponenta event banner

Опубликовать интерфейс в общей библиотеке C++ в Windows

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

  • Создать файл определения (definematrixlib.mlx).

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

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

Дополнительные сведения см. в разделе Создание интерфейса MATLAB к библиотеке C++.

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

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

Создать файл определения

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

Проверка выбранного компилятора C++

В этом примере используется компилятор MinGW64. Убедитесь, что выбран этот компилятор.

mex -setup cpp

Также можно выбрать компилятор Visual Studio ®. Установка значения дляlibPath как указано на шаге Идентификация файлов библиотеки C++.

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

Создайте папку для файла интерфейса MATLAB. Это необязательный шаг.

pubPath = [pwd + "\matrixexample"];
if ~isfolder(pubPath)
    mkdir(pubPath)
end
cd(pubPath)

Идентификация файлов библиотеки C++

Определите имена и пути к артефактам библиотеки C++. Общая библиотека создается с помощью определенного компилятора. Существует две версии библиотеки. Один построен с компилятором MinGW64, а другой - с компилятором Microsoft Visual Studio 2017. Установка значения libPath на основе выбранного компилятора.

productPath = fullfile(matlabroot,"extern","examples","cpp_interface");

% Link to library built with MinGW-w64 compiler
libPath = fullfile(productPath,"win64","mingw64");
% To link to library built with the Visual Studio compiler, use this path instead:
% libPath = fullfile(productPath,"win64","microsoft");

% 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 = "matrixOperations.lib";

Назовите интерфейс

По умолчанию 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)
Warning: Some C++ language constructs in the files for generating interface file 
are not supported and not imported.

Using MinGW64 Compiler (C++) compiler.
Generated definition file definematrixlib.mlx and data file 'matrixlibData.xml' 
contain definitions for 10 constructs supported by MATLAB.
5 construct(s) require(s) additional definition. 
To include these construct(s) in the interface, 
edit the definitions in definematrixlib.mlx.
Build using build(definematrixlib).

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

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.

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

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

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

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

    defineArgument(addMatDefinition, "mat", "clib.matrixlib.Mat", "input", 1);
  5. В функции 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 
'C:\Documents\matrixexample\matrixlib'.
To use the library, add the interface file folder to the MATLAB path.

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

Тестирование интерфейса

Для проверки интерфейса см. раздел Функции вызова в интерфейсе Windows к общей библиотеке C++.

См. также

Связанные темы