Этот пример создает интерфейс MATLAB® к библиотеке matrixOperations
C++ для Windows®. Для примера Linux® смотрите, Публикуют Интерфейс к Разделяемой Библиотеке C++ по Linux. Процесс включает:
Сгенерируйте файл определения (definematrixlib.mlx
).
Измените файл определения, чтобы завершить любые определения, которые MATLAB не может автоматически преобразовать.
Создайте интерфейс библиотеки.
Для получения дополнительной информации смотрите Сборку Интерфейс MATLAB к Библиотеке C++.
MATLAB обеспечивает библиотеку C++ и заголовочные файлы для вас, чтобы использовать в этом примере. Файлы находятся в этой папке и ее подпапках:
fullfile(matlabroot,'extern','examples','cpp_interface');
Первый шаг для генерации интерфейса готовит необходимые папки и файлы и вызов clibgen.generateLibraryDefinition
сгенерировать файл определения.
Проверьте выбранный компилятор C++
Этот пример использует компилятор MinGW64. Проверьте, что вам выбрали этот компилятор.
mex -setup cpp
В качестве альтернативы можно выбрать Визуальный компилятор 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.
Ищите файл определения 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 'C:\Documents\matrixexample\matrixlib'. To use the library, add the interface file folder to the MATLAB path.
Обязательно щелкните по ссылке в сообщении, чтобы добавить интерфейсный файл в путь.
Чтобы протестировать интерфейс, смотрите Вызов функций в Windows Interface на C++ Разделяемая Библиотека.
clibgen.generateLibraryDefinition