mEX

Создайте MEX-функцию из исходного кода C/C++ или Фортрана

Синтаксис

mex filenames
mex option1 ... optionN filenames
mex -setup lang
mex -setup -client engine [lang]

Описание

пример

Примечание

Команда mex создает MEX-функции и приложения механизма, записанные с MATLAB Data API, Матричным API C и Матричным API Фортрана.

Компиляции mex filenames и ссылки один или несколько C, C++ или исходные файлы Фортрана в бинарный файл MEX, вызываемый от MATLAB®. filenames задает исходные файлы. Также исполняемые файлы сборок для автономного движка MATLAB и приложений MAT-файла.

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

пример

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

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

mex -setup -client engine [lang] выбирает компилятор для того, чтобы создать приложения механизма. Используйте эту опцию когда это необходимо, чтобы изменить компилятор по умолчанию. Используйте аргумент lang для выбора компиляторы C ++ или Fortran.

Примеры

свернуть все

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

Создайте перезаписываемую папку на своем пути c:\work и установите его как текущую папку.

[s,msg,msgid] = mkdir('c:\work');
if (isempty(msgid))
    mkdir('c:\work')
end
cd c:\work

Скопируйте пример исходного кода с папки 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 =

    2.0000    8.9685    4.0000   -1.0947

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

mex -v -compatibleArrayDims yprime.c

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

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

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

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

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

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

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

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

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

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

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

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

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

Создайте файл MEX fulltosparse. Именем файла 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.

Пример файла MEX fulltosparse состоит из двух исходных файлов Фортрана. Файл 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.

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

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

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

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

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 отображает опции для вашей версии и системы на основе списка Поддерживаемых и Совместимых Компиляторов.

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

свернуть все

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

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

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

  • S-функциональные-файлы Simulink®

  • Объектные файлы

  • Статические файлы библиотеки. Для соединения динамических библиотек используйте опцию -llibname.

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

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

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

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

@rspfile

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

C

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

-client engine

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

-Dsymbolname
-Dsymbolname=symbolvalue
-Usymbolname

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

  • #define symbolname

  • #define symbolname symbolvalue

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

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

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

-f filepath

Чтобы создать приложения механизма, используйте опцию -client engine.

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

G

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

Справка

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

-Ipathname

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

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

Пример: Определение пути, чтобы включать файл

-llibname
-Llibfolder -llibname

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

MATLAB расширяет libname до:

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

  • lib libname .dylib — Системы Mac

  • lib libname .so — Системы Linux

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

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

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

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

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

N

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

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

O

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

Оптимизация включена по умолчанию. Оптимизация отключена, когда опция -g появляется без опции -O.

Задайте эту опцию с прописной буквой O.

-outdir dirname

Места все выходные файлы в папке dirname.

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

-output mexname

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

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

-R2017b (значение по умолчанию)
-R2018a
-largeArrayDims
-compatibleArrayDims

Ссылки с заданной обработкой массива MATLAB C или Матричным API Фортрана. Не используйте эту опцию для файлов MEX или приложения механизма с помощью MATLAB Data API.

  • R2017b 'DefaultOption' . -R2017b использует опцию -largeArrayDims и обрабатывает указатель на графический объект как object, не double.

  • -R2018a — Использует чередованный комплексный API, который включает введенные функции доступа к данным.

    Запускать файл MEX Фортрана создало с чередованным комплексным API в MATLAB R2018a, необходимо использовать Обновление MATLAB R2018a 3.

  • -largeArrayDims — Использует API обработки большого массива MATLAB. Этот API обрабатывает массивы больше чем с 231-1 элементом. Должен использовать эту опцию при вызове функций BLAS или LAPACK.

  • -compatibleArrayDims — Использует API обработки массива MATLAB Version 7.2, который ограничивает массивы 231-1 элементом. Опция по умолчанию для S-функций MEX C только.

-setup lang

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

-silent

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

-Usymbolname

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

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

V

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

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

varname=varvalue

Настройка по умолчанию переопределений для переменного varname. Эта опция обрабатывается после того, как все параметры командной строки рассматриваются.

Пример: Переопределение опции переключателя компилятора по умолчанию.

Язык, заданный как одно из этих значений.

C

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

C++ или CPP

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

Fortran

Компиляторы Фортрана.

Советы

  • Можно запустить mex от:

    • Окно Команды MATLAB

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

    • Терминал Mac

    • Интерпретатор Linux

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

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

    Расширение зависимого платформы файла MEX

    ПлатформаБинарное расширение файла MEX

    (64-битный) Linux

    mexa64

    Apple (64-битный) Mac

    mexmaci64

    Windows (64-bit)

    mexw64

    Чтобы идентифицировать расширение файла MEX, используйте функцию mexext.

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

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

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

Была ли эта тема полезной?