이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

mex

MEX 함수 또는 엔진 응용 프로그램 빌드

설명

예제

mex filenamesMATLAB Data API로 작성한 하나 이상의 C++ 소스 파일을 컴파일하고 현재 폴더의 이진 MEX 파일로 링크합니다. 이러한 응용 프로그램의 작성에 대한 자세한 내용은 C++ MEX 응용 프로그램 항목을 참조하십시오.

C에서 MATLAB 호출하기 또는 Fortran에서 MATLAB 호출하기 항목을 기반으로 MEX 파일을 작성하는 경우 mex filenames-R2017b api를 사용하여 하나 이상의 C, C++ 또는 Fortran 소스 파일을 빌드합니다. MATLAB®의 향후 버전에서는 디폴트 api 옵션이 실수부/허수부 결합형 복소수 API(-R2018a)를 사용하도록 변경됩니다. MathWorks는 실수부/허수부 결합형 복소수 API를 사용하도록 MEX 파일을 생성하고 기존 MEX 파일을 업데이트할 것을 권장합니다. 또는 여러 MATLAB 버전에서 의도한 대로 일관적으로 동작할 수 있도록 MX_HAS_INTERLEAVED_COMPLEX 매크로를 사용하십시오. 자세한 내용은 MATLAB Support for Interleaved Complex API in MEX Functions 항목을 참조하십시오.

C, C++ 및 Fortran 응용 프로그램 작업에 대한 자세한 내용은 MATLAB과 외부 프로그래밍 언어 및 시스템 통합하기 항목을 참조하십시오.

예제

mex filenames api option1 ... optionN은 지정된 api와 선택적으로 option1 ... optionN 인수를 사용하여 빌드합니다. 인수 option1 ... optionN은 디폴트 mex 빌드 구성을 보조하거나 재정의합니다.

mex -client engine filenamesMATLAB Data API로 작성한 C++ 소스 파일을 독립 실행형 MATLAB 엔진 응용 프로그램으로 빌드합니다. 자세한 내용은 Introduction to Engine API for C++ 항목을 참조하십시오.

C용 MATLAB Engine API, MAT 파일 데이터를 읽기 위한 MATLAB C API, Fortran용 MATLAB Engine API 또는 MAT 파일 데이터를 읽기 위한 MATLAB Fortran API 기반으로 응용 프로그램을 작성하는 경우 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]는 주어진 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 파일로 빌드합니다.

경로 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

출력값에 사용자의 플랫폼과 컴파일러 관련 정보가 표시됩니다.

기존 컴파일러 플래그에 값 -Wall을 추가하여 yprime.c MEX 파일을 빌드합니다. 이 값에 공백 문자가 들어 있기 때문에 문자열을 상세하게 조정해야 합니다. 사용하는 문자는 사용자의 플랫폼에 따라 다릅니다.

MATLAB 프롬프트에서는 MATLAB 작은따옴표(')를 사용합니다.

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

gcc/g++를 기반으로 하는 MinGW-w64 컴파일러의 경우 Linux® 컴파일러 플래그를 사용합니다.

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

Windows® 명령 프롬프트에서는 큰따옴표(")를 사용합니다.

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

macOS나 Linux의 셸 명령줄에서는 작은따옴표(')를 사용합니다.

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

MEX 파일 예제 fulltosparse는 두 개의 Fortran 소스 파일인 loadsparse.Ffulltosparse.F로 구성됩니다. 이 예제를 실행하려면 지원되는 Fortran 컴파일러가 시스템에 설치되어 있어야 합니다.

소스 파일을 현재 폴더에 복사합니다.

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

fulltosparse MEX 파일을 빌드합니다. fulltosparse.F가 명령줄의 첫 번째 파일이므로, MEX 파일 이름은 fulltosparse입니다. 출력값에 사용자의 컴파일러 관련 정보가 들어 있습니다.

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는 두 개의 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.

-I 옵션을 사용하여, 복소수 루틴을 처리하는 MATLAB LAPACK 라이브러리 서브루틴을 포함할 경로를 지정할 수 있습니다. 이 서브루틴을 사용하려면 MEX 파일이 헤더 파일 fort.h에 액세스해야 합니다.

matrixDivideComplex.c 예제를 현재 폴더에 복사합니다.

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

'-I'fort.h 파일 경로와 결합하여 -I 인수를 만듭니다.

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)

-L 옵션과 -l 옵션을 사용하여 libmwlapack.lib 라이브러리를 지정함으로써 Windows 플랫폼에서 matrixDivide.c 예제를 빌드합니다. 이 라이브러리 파일은 폴더 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 파일을 빌드하기 위해 다음 명령문에 나온 대로 matlabrootarch의 값을 mex 명령에 복사합니다.

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

경로 \Program Files에 공백이 있기 때문에, ' 문자를 사용해야 합니다.

mxcreatecharmatrixfromstr.c 예제에서는 행렬의 문자형 벡터 사이에 사용할 문자를 #define 기호인 SPACE_PADDING으로 지정합니다. 값을 설정하려면 -D 옵션을 사용하여 MEX 파일을 빌드하십시오.

이 예제를 현재 폴더에 복사합니다.

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 서버로 등록해야 합니다. 자세한 내용은 Register MATLAB as a COM Server 항목을 참조하십시오.

예제를 실행합니다.

!engwindemo
mex -setup

MATLAB이 사용자의 버전과 시스템에 맞는 옵션을 지원 및 호환되는 컴파일러 목록을 기반으로 하여 표시합니다.

입력 인수

모두 축소

하나 이상의 파일 이름으로, 이름과 파일 확장자를 포함하며 string형 또는 문자형 벡터로 지정됩니다. 파일이 현재 폴더에 없는 경우, 파일 전체 경로를 지정하십시오.

파일 이름은 다음의 조합일 수 있습니다.

  • C, C++, Fortran 언어 소스 파일

  • Simulink® S-Function 파일

  • 객체 파일

  • 정적 라이브러리 파일. 동적 라이브러리를 연결하려면 -llibname 옵션을 사용하십시오.

filenames 목록에 나오는 첫 번째 소스 코드 파일이 이진 MEX 파일 또는 엔진 응용 프로그램의 이름입니다. 명명 규칙을 재정의하려면 '-output' 옵션을 사용하십시오.

MATLAB 편집기를 사용하여 소스 코드를 작성하십시오. Microsoft® Visual Studio® 또는 Xcode와 같은 통합 개발 환경(IDE)을 사용하는 경우 mex 명령을 사용하거나 Custom Build with MEX Script Options 항목의 지침을 따를 수 있습니다.

MATLAB은 설치되어 있는 경우 컴파일러를 자동으로 선택하며 이때 filenames 인수의 언어를 기준으로 합니다.

데이터형: char

릴리스별 C에서 MATLAB 호출하기 또는 Fortran에서 MATLAB 호출하기 항목과 연결되며, 다음 값 중 하나로 지정됩니다. 이러한 옵션은 함께 사용하지 마십시오.

MATLAB Data API를 사용하는 MEX 파일 또는 엔진 응용 프로그램에 이 옵션을 사용하지 마십시오.

API설명

-R2017b(디폴트 값)

빌드 환경:

  • 실수부/허수부 분리형 복소수 API. 이 API는 MATLAB R2017b 및 이전 버전의 C 및 Fortran Matrix API 기능을 포함합니다.

  • 대규모 배열 처리 API. 이 API는 요소가 231-1개가 넘는 배열을 처리할 수 있습니다.

  • 그래픽스 객체에 대한 핸들을 double이 아닌 object로 처리합니다.

MATLAB의 향후 버전에서는 디폴트 api 옵션이 실수부/허수부 결합형 복소수 API(-R2018a)를 사용하도록 변경됩니다. MathWorks는 실수부/허수부 결합형 복소수 API를 사용하도록 응용 프로그램을 생성하고 기존 응용 프로그램을 업데이트할 것을 권장합니다. 또는 여러 MATLAB 버전에서 의도한 대로 일관적으로 동작할 수 있도록 MX_HAS_INTERLEAVED_COMPLEX 매크로를 사용하십시오. 자세한 내용은 MATLAB Support for Interleaved Complex API in MEX Functions 항목을 참조하십시오.

-R2018a

빌드 환경:

실수부/허수부 결합형 복소수 API를 사용하여 빌드한 Fortran MEX 파일을 MATLAB R2018a에서 실행하려면 MATLAB R2018a 업데이트 3을 사용해야 합니다.

-largeArrayDims

빌드 환경:

  • 실수부/허수부 분리형 복소수 API

  • 대규모 배열 처리 API

  • 그래픽스 객체에 대한 핸들을 double이 아닌 object로 처리합니다. 핸들을 double로 처리하려면 이 옵션을 -DMEX_DOUBLE_HANDLE과 함께 사용하십시오.

-compatibleArrayDims

빌드 환경:

  • 실수부/허수부 분리형 복소수 API

  • 버전 7.2 배열 처리 API. 이 API는 배열을 231-1개 요소로 제한합니다.

  • 그래픽스 객체에 대한 핸들을 double이 아닌 object로 처리합니다. 핸들을 double로 처리하려면 이 옵션을 -DMEX_DOUBLE_HANDLE과 함께 사용하십시오.

LAPACK 함수나 BLAS 함수를 호출할 때는 -compatibleArrayDims 옵션을 사용하지 마십시오.

C MEX S-Function에만 사용되는 디폴트 옵션입니다.

예: 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 옵션의 역입니다.

DUsymbolname 사이에 공백을 추가하지 마십시오. = 부호 주위에 공백을 추가하지 마십시오.

예: 컴파일러 지시문 정의하기

-f filepath

디폴트 컴파일러 선택 사항을 재정의합니다. filepath는 구성 파일의 이름과 전체 경로로, string형 또는 문자형 벡터로 지정됩니다. 디폴트가 아닌 컴파일러 사용에 대한 자세한 내용은 디폴트 컴파일러 변경하기 항목을 참조하십시오.

-f 옵션을 사용하여 엔진 응용 프로그램을 빌드하지 마십시오. -client engine 옵션을 대신 사용하십시오.

-g

기호화된 정보를 추가하고 빌드된 객체 코드 최적화를 비활성화합니다. 디버그에 사용하십시오. 최적화로 디버그하려면 -O 옵션을 추가하십시오.

-h[elp]

mex의 도움말을 표시합니다. 운영 체제 프롬프트에서 사용하십시오.

-Ipathname

#include 파일을 검색할 폴더 목록에 pathname을 추가합니다.

Ipathname 사이에 공백을 추가하지 마십시오.

예: 파일을 포함할 경로 지정

-llibname
-Llibfolder -llibname

libfolder(선택 사항)에 있는 동적 객체 라이브러리 libname과 연결합니다.

MATLAB은 libname을 다음으로 확장합니다.

  • libname.lib 또는 liblibname.lib — Windows 시스템

  • liblibname.dylibmacOS 시스템

  • liblibname.so — Linux 시스템

사용되는 경우, -L 옵션이 -l 옵션보다 우선해야 합니다. Linux 시스템이나 macOS 시스템에서 -L 옵션을 사용할 때는 Set Run-Time Library Path 항목의 설명대로 런타임 라이브러리 경로도 설정해야 합니다.

llibname 사이 또는 Llibfolder 사이에 공백을 추가하지 마십시오.

소문자 L을 사용하여 -l 옵션을 지정하십시오.

정적 라이브러리를 연결하려면 filenames 입력 인수를 사용하십시오.

예: 라이브러리 파일 경로 지정

-n

mex에서 실행되는 명령을 표시하지만 실행하지는 않습니다.

예: 빌드 명령 미리보기

-O

객체 코드를 최적화합니다. 최적화를 사용하여 컴파일하려면 이 옵션을 사용하십시오.

최적화는 기본적으로 사용됩니다. -O 옵션 없이 -g 옵션이 나타나는 경우 최적화는 비활성화됩니다.

대문자 O를 사용하여 이 옵션을 지정하십시오.

-outdir dirname

모든 출력 파일을 폴더 dirname에 배치합니다.

예: 별도의 객체 파일을 만들고 이 파일에 연결

-output mexname

디폴트 MEX 파일 명명 메커니즘을 재정의합니다. 적절한 MEX 파일 확장자를 가지며 이름이 mexname인 이진 MEX 파일을 만듭니다.

예: 와일드카드를 사용하여 소스 파일 결합하기

-setup lang

lang 언어 MEX 파일 또는 엔진 응용 프로그램을 빌드하도록 디폴트 컴파일러를 변경합니다. 이 옵션을 사용하면 mex는 다른 모든 명령줄 옵션을 무시합니다.

-silent

정보 메시지를 표시하지 않습니다. -silent를 지정해도, mex 명령은 여전히 오류나 경고를 보고합니다.

-Usymbolname

C 전처리기 매크로의 초기 정의 symbolname을 제거합니다. (-D 옵션의 역입니다.)

Usymbolname 사이에 공백을 추가하지 마십시오.

-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 엔진 응용 프로그램을 위한 실행 파일을 빌드하려면 -client engine 옵션을 사용하십시오.

  • mex 명령에는 큰따옴표(") 문자를 포함하는 폴더 이름이 지원되지 않습니다.

R2006a 이전에 개발됨