exponenta event banner

mex

Создание функции MEX или приложения модуля

Описание

пример

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

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

Сведения о работе с приложениями C, C++ и Fortran см. в разделе Интеграция MATLAB с внешними языками и системами программирования.

пример

mex filenames api option1 ... optionN сборки с указанным api и факультативно option1 ... optionN аргументы. option1 ... optionN аргументы дополняют или переопределяют значение по умолчанию mex конфигурация построения.

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

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

mex -client engine filenames api option1 ... optionN создает приложения двигателя с указанным 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

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

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

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

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

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

  • С компиляторами Microsoft ® Visual Studio ® используйтеCOMPFLAGS.

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

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

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

Построить 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 состоит из двух исходных файлов Fortran, loadsparse.F и fulltosparse.F. Для запуска этого примера в системе должен быть установлен поддерживаемый компилятор Fortran.

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

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

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

mex -n yprime.c

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

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

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

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\microsoft.

Копировать 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 в контуре содержит пробел.

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 link, используйте команду LINKFLAGS параметр командной строки. Например, чтобы указать среду для исполняемого файла при построении mymex.c в Windows введите:

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

Входные аргументы

свернуть все

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

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

  • Исходные файлы языка C, C++ или Fortran

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

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

  • Файлы статической библиотеки. filenames должен содержать полный путь к файлу библиотеки. Чтобы связать динамические библиотеки, используйте -llibname вариант.

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

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

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

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

Связи с API матрицы C или API матрицы Fortran, определенным как одно из этих значений. Не объединяйте эти опции.

Не используйте этот параметр для файлов MEX или приложений ядра, использующих 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

Сборки с:

Для запуска файла Fortran 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-функций C MEX.

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

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

ВыборОписание

@rspfile

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

-c

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

-client engine

Создание приложения ядра.

-Dsymbolname
-Dsymbolname=symbolvalue
-Usymbolname

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

  • #define symbolname

  • #define symbolname symbolvalue

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

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

Пример: Определение директивы компилятора

-f filepath

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

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

-g

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

-h[elp]

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

-Ipathname

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

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

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

-llibname
-Llibfolder -llibname

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

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

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

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

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

Если используется, -L параметр должен предшествовать -l вариант. При использовании -L в системах Linux или macOS также необходимо задать путь к библиотеке среды выполнения, как описано в разделе Задать путь к библиотеке времени выполнения.

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

Укажите -l вариант со строчной буквой L.

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

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

-n

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

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

-O

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

Укажите этот параметр с заглавной буквы О.

-outdir dirname

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

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

-output mexname

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

Пример: Объединение исходных файлов с помощью подстановочного знака

-setup lang

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

-silent

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

-Usymbolname

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

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

-v

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

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

varname=varvalue

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

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

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

C

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

C++ или CPP

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

Fortran

Компиляторы 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 для построения исполняемых файлов для автономных приложений MATLAB Engine используйте -client engine вариант.

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

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