mex

Создайте MEX-функцию или приложение engine

Описание

пример

mex filenames компилирует и связывает один или несколько исходных файлов C++, записанных с MATLAB Data API, в двоичный файл MEX в текущей папке. Информацию о записи этих приложений см. в разделе Приложения C++ MEX.

Если запись файлов MEX на основе API C Matrix или Фортран Matrix, то mex filenames создает один или несколько исходных файлов C, C++ или Фортран с -R2017b api. В следующей версии MATLAB®, значение по умолчанию api изменится, чтобы использовать перемежающийся комплексный API (-R2018a). MathWorks рекомендует создавать файлы MEX и обновлять существующие файлы MEX, чтобы использовать перемежающийся комплексный API. Кроме того, используйте MX_HAS_INTERLEAVED_COMPLEX макрос для обеспечения требуемого поведения между версиями MATLAB. Для получения дополнительной информации смотрите Поддержку MATLAB для чередующегося комплексного API в MEX-функциях.

Для получения информации о работе с приложениями C, C++ и Фортран, смотрите Интегрирация MATLAB с сторонними языками программирования и системами.

пример

mex filenames api option1 ... optionN создает с заданным api и дополнительные option1 ... optionN аргументы. The option1 ... optionN аргументы дополняют или переопределяют значение по умолчанию mex создайте строение.

mex -client engine filenames создает исходные файлы C++, написанные с помощью MATLAB Data API, в автономных приложениях способы применения Engine MATLAB. Для получения дополнительной информации смотрите Введение в Engine API для C++

Сочиняя приложения на основе API MATLAB Engine для C, MATLAB C API, чтобы Прочитать Данные MAT-файла, API MATLAB Engine для Фортрана или API Фортрана MATLAB, чтобы Прочитать Данные MAT-файла, тогда mex - двигатель клиента filenames создает автономное приложение с -R2017b api. В следующей версии MATLAB значение по умолчанию api изменится, чтобы использовать перемежающийся комплексный API (-R2018a). MathWorks рекомендует создание приложений Engine и обновление существующих приложений для использования чередующегося комплексного API.

mex -client engine filenames api option1 ... optionN создает приложения Engine с заданным api и дополнительные option1 ... optionN аргументы.

mex -setup [lang] отображает информацию о компиляторе по умолчанию для данного языка для создания файлов MEX. MATLAB определяет компилятор по умолчанию для каждого поддерживаемого языка. Если у вас есть несколько компиляторов для заданного языка, используйте lang Опция, чтобы изменить компилятор по умолчанию для этого языка. Для получения дополнительной информации смотрите Изменить компилятор по умолчанию и Выбрать компилятор C++.

mex -setup -client engine [lang] выбирает компилятор для создания приложений модуля.

Примеры

свернуть все

Скопируйте пример исходного кода из matlabroot/extern/examples папка.

copyfile(fullfile(matlabroot,'extern','examples','mex','explore.c'),'.','f')

Создайте файл MEX. Выходные выходы отображают информацию, относящуюся к вашему компилятору.

mex -R2018a explore.c

Тест.

a = [1 3 5];
b = [5 3 1];
A = complex(a,b);
explore(A)
------------------------------------------------
Name: prhs[0]
Dimensions: 1x3
Class Name: double
------------------------------------------------
	(1,1) = 1 + 5i
	(1,2) = 3 + 3i
	(1,3) = 5 + 1i

Создайте одну программу на C yprime.c в файл MEX.

Скопируйте пример исходного кода из matlabroot/extern/examples папка.

copyfile(fullfile(matlabroot,'extern','examples','mex','yprime.c'),'.','f')

Создайте файл MEX. Выходные выходы отображают информацию, относящуюся к вашему компилятору.

mex yprime.c
Building with 'MinGW64 Compiler (C)'.
MEX completed successfully.

Тест.

T=1;
Y=1:4;
yprime(T,Y)
ans = 1×4

    2.0000    8.9685    4.0000   -1.0947

Чтобы отобразить команды компиляции и ссылки и другую информацию, полезную для поиска и устранения проблем, используйте подробный режим.

mex -v -compatibleArrayDims yprime.c

Выходные выходы отображают информацию, относящуюся к вашей платформе и компилятору.

Используйте переменные окружения, чтобы задать дополнительные опции для передачи компилятору.

Определите имя переменной:

  • Для создания кода С++ с MinGW®, macOS и Linux® компиляторы, используйте CXXFLAGS.

  • Для создания кода С с помощью компиляторов MinGW, macOS и Linux используйте CFLAGS.

  • С Microsoft® Визуальная студия® компиляторы, используйте COMPFLAGS.

Задайте стандарт C++ 17 при создании файла MEX с помощью Visual Studio.

mex COMPFLAGS='$COMPFLAGS -std=c++17' yprime.c

Дополнительные сведения об использовании разделителей строк на других платформах см. в разделе «Переопределение опции Switch компилятора по умолчанию».

Создайте yprime.c Файл MEX путем добавления значения -Wall к существующим флагам компилятора. Поскольку значение включает символ, необходимо очертить строку; используемый символ зависит от платформы.

В подсказке MATLAB используйте одинарные кавычки MATLAB (').

mex -v COMPFLAGS='$COMPFLAGS -Wall' yprime.c

Для компилятора MinGW-w64, который основан на gcc/g + +, используйте флаги компилятора Linux. Выберите одну из следующих команд:

mex -v CXXFLAGS='$CXXFLAGS -Wall' yprime.c % C++ compiler
mex -v CFLAGS='$CFLAGS -Wall' yprime.c     % C compiler 

В Windows® командная строка, используйте двойные кавычки (").

mex -v COMPFLAGS="$COMPFLAGS -Wall" yprime.c

В командной строке интерпретатора на macOS и Linux используйте одинарные кавычки (').

mex -v CFLAGS='$CFLAGS -Wall' yprime.c

Пример файла MEX fulltosparse состоит из двух исходных файлов ФОРТРАН, loadsparse.F и fulltosparse.F. Чтобы запустить этот пример, вам нужен поддерживаемый компилятор Фортран, установленный в вашей системе.

Скопируйте исходные файлы в текущую папку.

copyfile(fullfile(matlabroot,'extern','examples','refbook','loadsparse.F'),'.','f')
copyfile(fullfile(matlabroot,'extern','examples','refbook','fulltosparse.F'),'.','f')

Создайте fulltosparse Файл MEX. Имя файла MEX fulltosparse потому что fulltosparse.F - первый файл в командной строке. Выходы содержат информацию, относящуюся к вашему компилятору.

mex -largeArrayDims fulltosparse.F loadsparse.F
Building with 'Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2012'.
MEX completed successfully.

Тест.

full = eye(5);
spar = fulltosparse(full)
spar =

    1,1         1
    2,2         1
    3,3         1
    4,4         1
    5,5         1

Объедините все исходные файлы C в текущей папке в файлы MEX mymex. Используйте -output опция управления именем файла MEX.

mex -output mymex *.c

Чтобы просмотреть детали команды сборки, не выполняя команды, используйте -n опция. Выходы содержат информацию, относящуюся к вашей платформе и компилятору.

mex -n yprime.c

Можно ссылаться на файлы объектов, которые вы компилируете отдельно от исходных файлов MEX.

Пример fulltosparse файла MEX состоит из двух исходных файлов Фортран. The fulltosparse файл является стандартной программой шлюза (содержит mexFunction стандартная подпрограмма) и loadsparse содержит вычислительную процедуру.

Чтобы запустить этот пример, вам нужен поддерживаемый компилятор Фортран, установленный в вашей системе. Скопируйте вычислительную стандартную подпрограмму в текущую папку.

copyfile(fullfile(matlabroot,'extern','examples','refbook','loadsparse.F'),'.','f')

Скомпилируйте стандартную подпрограмму и поместите файл объекта в отдельную папку, c:\objfiles.

mkdir c:\objfiles
mex -largeArrayDims -c -outdir c:\objfiles loadsparse.F
Building with 'Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2012'.
MEX completed successfully.

Скопируйте стандартную подпрограмму шлюза в текущую папку. Скомпилируйте и соединяйте с loadsparse файл объекта.

copyfile(fullfile(matlabroot,'extern','examples','refbook','fulltosparse.F'),'.','f')
mex -largeArrayDims fulltosparse.F c:\objfiles\loadsparse.obj
Building with 'Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2012'.
MEX completed successfully.

Чтобы задать путь для включения стандартных подпрограмм библиотеки MATLAB LAPACK для обработки стандартных программ комплексных номеров, используйте -I опция. Чтобы использовать эти стандартные подпрограммы, ваш файл MEX должен получить доступ к файлу заголовка fort.h.

Скопируйте matrixDivideComplex.c пример для текущей папки.

copyfile(fullfile(matlabroot,'extern','examples','refbook','matrixDivideComplex.c'),'.','f')

Создайте -I аргумент путем конкатенации '-I' с путем к fort.h файл.

ipath = ['-I' fullfile(matlabroot,'extern','examples','refbook')];

Создайте переменные для имен и путей к файлу библиотеки LAPACK и файлу, fort.c, содержащего стандартные программы обработки комплексных чисел.

lapacklib = fullfile(matlabroot,'extern','lib',computer('arch'),'microsoft','libmwlapack.lib');
fortfile = fullfile(matlabroot,'extern','examples','refbook','fort.c');

Создайте файл MEX.

mex('-v','-R2017b',ipath,'matrixDivideComplex.c',fortfile,lapacklib)

Создайте matrixDivide.c пример на платформе Windows, использующей -L и -l опции для задания libmwlapack.lib библиотека. Файл библиотеки находится в папке, matlabroot\ extern\lib\ arch\ майкрософт.

Скопируйте matrixDivide.c пример для текущей папки.

copyfile(fullfile(matlabroot,'extern','examples','refbook','matrixDivide.c'),'.','f')

Захват значения matlabroot.

matlabroot
ans =

C:\Program Files\MATLAB\R2014a

Захват значения arch.

computer('arch')
ans =

win64

Чтобы создать файл MEX, скопируйте значения matlabroot и arch в mex команда, как показано на следующем операторе.

mex '-LC:\Program Files\MATLAB\R2014a\extern\lib\win64\microsoft'...
   -llibmwlapack matrixDivide.c

Вы должны использовать ' символы, потому что \Program Files в пути включает пространство.

The mxcreatecharmatrixfromstr.c пример использует #define символ SPACE_PADDING чтобы определить, какой символ использовать между векторами символов в матрице. Чтобы задать значение, создайте файл MEX с -D опция.

Скопируйте пример в текущую папку.

copyfile(fullfile(matlabroot,'extern','examples','mx','mxcreatecharmatrixfromstr.c'),'.','f')

Установите SPACE_PADDING директива для добавления пространства между значениями.

mex mxcreatecharmatrixfromstr.c -DSPACE_PADDING
Building with 'MinGW64 Compiler  C '.
MEX completed successfully.

Скопируйте engwindemo.c пример двигателя в текущую папку.

copyfile(fullfile(matlabroot,'extern','examples','eng_mat','engwindemo.c'),'.','f')
mex -client engine engwindemo.c

Если вы работаете на платформе Windows, сначала необходимо зарегистрировать MATLAB как COM-сервер. Дополнительные сведения см. в разделе Регистрация MATLAB в качестве COM-сервера.

Запустите пример.

!engwindemo
mex -setup

MATLAB отображает опции вашей версии и системы на основе списка Поддерживаемые и Совместимые компиляторы.

Чтобы добавить опции к mex ссылка, используйте LINKFLAGS опция командной строки. Для примера укажите окружение для исполняемого файла при сборке mymex.c в Windows введите:

mex -v LINKFLAGS='$LINKFLAGS /subsystem:windows' mymex.c

Входные параметры

свернуть все

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

Имена файлов могут быть любыми комбинациями:

  • Исходные файлы на C, C++ или Фортран

  • Simulink® Файлы S-функций

  • Файлы объектов

  • Статические файлы библиотеки. filenames должен включать полный путь к файлу библиотеки. Чтобы связать динамические библиотеки, используйте libname -l опция.

Первый файл исходного кода, перечисленный в filenames - имя двоичного файла MEX или приложения engine. Чтобы переопределить это соглашение об именовании, используйте '-output' опция.

Используйте Редактор MATLAB, чтобы написать исходный код. Если вы используете интегрированную среду разработки (IDE), такую как Microsoft Visual Studio или Xcode, то можно использовать mex или следуйте инструкциям в Пользовательской сборке с MEX Скрипта Опций.

MATLAB автоматически выбирает компилятор, если он установлен, на основе языка filenames аргументы.

Типы данных: char

Ссылки с специфичным для release API C Matrix или Фортрана Матрицы API, заданные в качестве одного из следующих значений. Не комбинируйте эти опции.

Не используйте эту опцию для файлов MEX или приложений Engine, использующих MATLAB Data API.

APIОписание

-R2017b (по умолчанию)

Построения с:

  • Отдельный комплексный API, который содержит функциональность C и Fortran Matrix API в MATLAB R2017b и более ранних версиях.

  • API, обрабатывающий большие массивы, который обрабатывает массивы с более чем 231-1 элемент.

  • Обрабатывает указатель на графический объект как object, не double.

В следующей версии MATLAB значение по умолчанию api изменится, чтобы использовать перемежающийся комплексный API (-R2018a). MathWorks рекомендует создание приложений и обновление существующих приложений для использования чередующегося комплексного API. Кроме того, используйте MX_HAS_INTERLEAVED_COMPLEX макрос для обеспечения требуемого поведения между версиями MATLAB. Для получения дополнительной информации смотрите Поддержку MATLAB для чередующегося комплексного API в MEX-функциях.

-R2018a

Построения с:

Чтобы запустить файл MEX на языке Фортран, созданный с помощью чередующегося комплексного API в MATLAB R2018a, необходимо использовать MATLAB R2018a Update 3.

-largeArrayDims

Построения с:

  • Отдельный комплексный API

  • API, обрабатывающий большие массивы

  • Обрабатывает указатель на графический объект как object, не double. Для обработки указателя следующим double, объедините эту опцию с -DMEX_DOUBLE_HANDLE.

-compatibleArrayDims

Построения с:

  • Отдельный комплексный API

  • API для обработки массивов версии 7.2, который ограничивает массивы 231-1 элемент

  • Обрабатывает указатель на графический объект как object, не double. Для обработки указателя следующим double, объедините эту опцию с -DMEX_DOUBLE_HANDLE.

Не используйте -compatibleArrayDims опция при вызове функций LAPACK или BLAS.

Опция по умолчанию только для S-функций MEX на C.

Пример: mex -R2018a explore.c

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

ОпцияОписание

rspfile

Использует файл Windows RSP. RSP-файл является текстовым файлом, содержащим опции командной строки. Символы, отличные от ASCII, не поддерживаются.

-c

Скомпилирует только файл объекта. Не создает двоичный файл MEX.

-client engine

Создайте приложение модуля.

-D symbolname
-D symbolname= symbolvalue
-U symbolname

The -D опции определяют C-макросы препроцессора. Эквивалентно следующему в исходном файле:

  • #define symbolname

  • #define symbolname symbolvalue

The -U опция удаляет любое начальное определение макроса препроцессора C, symbolname. Обратная -D опция.

Не добавляйте пространство между D или U и symbolname. Не добавляйте пространства вокруг = знака.

Пример: Задайте Директиву Компилятора

-f filepath

Переопределяет выбор компилятора по умолчанию. filepath - имя и полный путь к файлу строения, заданные как строка или вектор символов. Дополнительные сведения об использовании компилятора, не используемого по умолчанию, см. в разделе Изменение компилятора по умолчанию.

Не используйте -f опция создания приложений двигателя. Используйте -client engine вместо этого опция.

-g

Добавляет символьную информацию и отключает оптимизацию встроенных объектных кодов. Используется для отладки.

-h[elp]

Отображает справку для mex. Использование приглашения операционной системы.

-I pathname

Добавляет pathname в список папок для поиска #include файлы.

Не добавляйте пространство между I и pathname.

Пример: Укажите путь для включения файла

-l libname
-L libfolder -l libname

Ссылки с динамическими libname библиотеки объектов (необязательно) libfolder.

MATLAB расширяет libname кому:

  • libname.lib или liblibname.lib - Системы Windows

  • liblibname.dylib - системы macOS

  • liblibname.so - Системы Linux

Если используется, -L опция должна предшествовать -l опция. При использовании -L Опция в системах Linux или macOS необходимо задать путь к библиотеке во время выполнения, как объяснено в Set Run-Time Library Path.

Не добавляйте пространство между l и libname или между L и libfolder.

Задайте -l опция со строчной буквой L.

Чтобы связать статическую библиотеку, используйте filenames входной параметр.

Пример: Укажите путь к файлу библиотеки

-n

Отображает, но не выполняет, команды, которые mex выполнит.

Пример: Предварительный просмотр команд сборки

-O

Оптимизирует объектный код. Используйте эту опцию для компиляции с оптимизацией. Оптимизация включена по умолчанию.

Задайте эту опцию с помощью O большой буквы.

-outdir dirname

Помещает все выходные файлы в папку dirname.

Пример: Создайте и соедините с отдельными файлами объекта

-output mexname

Переопределяет механизм именования файлов MEX по умолчанию. Создает двоичный файл MEX с именем mexname с соответствующим расширением файла MEX.

Пример: Объедините исходные файлы с помощью Wild Card

-настройка lang

Измените компилятор по умолчанию, чтобы создать lang языковые файлы MEX или приложения Engine. Когда вы используете эту опцию, mex игнорирует все другие опции командной строки.

-silent

Подавляет информационные сообщения. mex команда все еще сообщает об ошибках и предупреждениях, даже когда вы задаете -silent.

-U symbolname

Удаляет любое начальное определение макроса препроцессора C symbolname. (Обратная -D опция.)

Не добавляйте пространство между U и symbolname.

-v

Строит в подробном режиме. Отображает значения внутренних переменных после рассмотрения всех аргументов в командной строке. Отображает каждый полностью рассчитанный шаг компиляции и ссылки. Используйте для устранения неполадок при настройке компилятора.

Пример: Отображение подробной информации о сборке и поиске и устранении проблем

varname= varvalue

Добавьте значения к переменной окружения varname. Эта опция обрабатывается после рассмотрения всех аргументов в командной строке.

Примеры: Добавление опций компилятора
Переопределение опции коммутатора компилятора по умолчанию

Язык, заданный как одно из значений, нечувствительных к этому случаю.

C

Компиляторы C, включая C++

C++ или CPP

Компиляторы C++

Fortran

Компиляторы на языке ФОРТРАН

Совет

  • Вы можете запустить mex от:

    • Командное окно MATLAB

    • Системное приглашение Windows

    • Терминал macOS

    • Система Linux интерпретатора

    Для использования в командной строке вне MATLAB, mex программа находится в папке, заданной [matlabroot '/bin'] в UNIX и [matlabroot '\bin\win64'] в Windows.

  • Файл MEX имеет зависящее от платформы расширение. Можно разместить двоичные файлы MEX для других платформ в одной папке. Чтобы идентифицировать расширение файла MEX, используйте mexext функция.

    Зависящее от файловой платформы MEX расширение

    ПлатформаДвоичное расширение файла MEX

    Linux (64-разрядная версия)

    mexa64

    Apple Mac (64-разрядный)

    mexmaci64

    Windows (64-разрядная)

    mexw64

  • Использовать mex чтобы создать исполняемые файлы для автономных приложений способы применения Engine MATLAB, используйте -client engine опция.

  • mex команда не поддерживает имена папок, содержащие двойную кавычку ("Персонажи.

Представлено до R2006a