Этот пример создает интерфейс MATLAB® к библиотеке matrixOperations
C++ для Windows®. Для примера Linux® смотрите, Публикуют Интерфейс к Разделяемой Библиотеке C++ по Linux. Процесс включает:
Сгенерируйте файл определения (definemyPkg.mlx
).
Измените файл определения, чтобы завершить любые определения, которые MATLAB не может автоматически преобразовать.
Создайте интерфейс библиотеки.
Для получения дополнительной информации смотрите Сборку Интерфейс MATLAB к Библиотеке C++.
MATLAB обеспечивает библиотеку C++ и заголовочные файлы для вас, чтобы использовать в этом примере. Файлы библиотеки находятся в этой папке и ее подпапках:
fullfile(matlabroot,'extern','examples','cpp_interface')
Первый шаг для генерации интерфейса готовит необходимые папки и файлы и вызов clibgen.generateLibraryDefinition
сгенерировать файл определения.
Создайте папку издателя
Создайте папку H:\Documents\MATLAB\publisher\matrixexample
поскольку MATLAB соединяет интерфейсом с файлом.
pubPath = 'H:\Documents\MATLAB\publisher\matrixexample'; if ~isfolder(pubPath) mkdir(pubPath) end cd(pubPath)
Проверьте выбранный компилятор C++
Существует две версии библиотеки. Каждый создается с компилятором MinGW64 и другим с компилятором Microsoft Visual Studio® 2017. Этот пример использует компилятор MinGW64. Проверьте, что вам выбрали этот компилятор.
mex -setup cpp
В качестве альтернативы можно выбрать компилятор Visual Studio. Установите значение для libPath
как задано на идентифицировать шаге файлов библиотеки.
Идентифицируйте файлы библиотеки C++
Идентифицируйте имена и пути к артефактам библиотеки C++. Библиотека создается с определенным компилятором. Этот пример принимает, что вы используете компилятор MinGW-w64.
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
. В данном примере поменяйте имя на myPkg
.
myPkg = 'myPkg';
Вызвать clibgen.generateLibraryDefinition
Чтобы создать интерфейс, необходимо задать:
Имя заголовочного файла matrixOperations.hpp
и его местоположение.
Путь к папке, содержащей включать файлы, с помощью 'IncludePath'
аргумент.
Название и местоположение совместно использованного файла библиотеки matrixOperations.lib
, использование 'Libraries'
аргумент.
Опционально, можно задать:
Имя библиотеки, с помощью 'PackageName'
аргумент.
Отобразите сообщения генерации, с помощью 'Verbose'
аргумент.
clibgen.generateLibraryDefinition(fullfile(hppPath,hppFile),... 'IncludePath', iPath,... 'Libraries', fullfile(libPath,libFile),... 'PackageName', myPkg,... 'ReturnCArrays',false,... % treat output as MATLAB arrays 'Verbose',true)
Using MinGW64 Compiler (C++) compiler. Generated definition file definemyPkg.mlx and data file 'myPkgData.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 definemyPkg.mlx. Build using build(definemyPkg).
Подтвердите библиотеку.
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.
Ищите файл определения setMat
метод и некомментарий операторы, задающие его. Задавать src
аргумент, в этом defineArgument
оператор, замена <SHAPE>
с "len"
.
defineArgument(setMatDefinition, "src", "clib.array.myPkg.Int", "input", "len");
В методе getMat
, задайте RetVal
выведите, заменив <SHAPE>
с "len"
.
defineOutput(getMatDefinition, "RetVal", "int32", "len");
В методе copyMat
, задайте dest
аргумент, заменяя <SHAPE>
с "len"
.
defineArgument(copyMatDefinition, "dest", "clib.array.myPkg.Int", "input", "len");
В функциональном addMat
, задайте mat
аргумент в функциональном addMat
заменяя <SHAPE>
с 1
.
defineArgument(addMatDefinition, "mat", "clib.myPkg.Mat", "input", 1);
В функциональном 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.
Обязательно щелкните по ссылке в сообщении, чтобы добавить интерфейсный файл в путь.
Чтобы протестировать интерфейс, смотрите Вызов функций в Windows Interface на C++ Разделяемая Библиотека.
clibgen.generateLibraryDefinition