Main Content

C++ 컴파일 라이브러리에서 함수 호출하기

C++ 라이브러리에 대한 MATLAB® 인터페이스의 퍼블리셔는 필요하다면 인터페이스 파일과 종속 라이브러리 파일의 설치 지침을 제공합니다. 퍼블리셔는 종속 라이브러리 파일을 제공하거나 외부 소스로부터 라이브러리를 설치하도록 요청하거나 모든 관련 파일에 대한 링크를 제공할 수 있습니다. 퍼블리셔가 MATLAB 애드온을 사용하여 툴박스를 만든 경우, 이 정보는 애드온 매니저에서 툴박스에 대한 옵션 메뉴를 통해 제공되는 시작하기 안내서에서 볼 수 있습니다. 추가 정보가 필요하거나 시작하기 안내서를 찾을 수 없는 경우 퍼블리셔에 문의하십시오. 애드온에 대한 자세한 내용은 애드온 관리하기 항목을 참조하십시오.

라이브러리 libname의 인터페이스 파일 이름은 libnameInterface.ext입니다. 여기서 ext는 플랫폼마다 다릅니다. Windows®에서는 .dll, Linux®에서는 .so 또는 macOS에서는 .dylib입니다.

런타임 경로 설정하기

MATLAB은 MATLAB 경로에서 인터페이스 파일을 찾고 시스템 경로 또는 런타임 검색 경로(rpath)에서 종속 라이브러리 파일을 찾습니다. 퍼블리셔가 종속 라이브러리 파일을 제공한다면 이러한 파일을 인터페이스 파일과 같은 폴더에 넣으면 됩니다. 또는, 이러한 파일을 시스템 경로에 추가하려면 Set Run-Time Library Path for C++ Interface 항목을 참조하십시오. 종속 라이브러리 찾기에 대한 자세한 내용은 Missing or Incorrectly Installed Run-Time Libraries 항목을 참조하십시오.

MATLAB 경로 설정하기

인터페이스 파일이 포함된 폴더에 대해 addpath를 호출합니다.

도움말 표시하기

MATLAB helpdoc 함수는 라이브러리의 구성원에 대한 도움말을 제공합니다. 예를 들어, 라이브러리 libname에서 함수 funcname에 대한 도움말을 표시하려면 다음을 입력하십시오.

help clib.libname.funcname

함수 호출하기

C++ 라이브러리 libname의 함수 funcname을 입력 인수 arg1,arg2,...와 출력 인수 retVal을 사용하여 호출하려면, MATLAB clib 네임스페이스를 사용하십시오. 다음을 입력하면 MATLAB이 라이브러리를 자동으로 불러옵니다.

retVal = clib.libname.funcname(arg1,arg2,...)

MATLAB이 라이브러리를 불러온 후에는 탭 완성을 사용하여 clib 네임스페이스의 구성원을 볼 수 있습니다.

MATLAB 데이터형과 C++ 데이터형 간 매핑

MATLAB 데이터를 C++ 메서드나 함수에 인수로 전달할 경우 MATLAB은 이 데이터를 C++ 언어에서 가장 잘 표현할 수 있는 유형으로 변환합니다.

다음 표의 각 행에는 MATLAB 데이터형과 함께, 그에 상응하는 C++ 인수가 왼쪽부터 오른쪽으로 근사한 정도 순으로 나와 있습니다. MATLAB 데이터형(셀형 배열 제외)은 스칼라(1×1) 배열 또는 행렬일 수 있습니다. C++ 데이터형은 스칼라 값 또는 배열일 수 있습니다. 구문 cpparray는 다음 C++ 배열 유형을 나타냅니다.

  • 상자 배열([])

  • 배열 버퍼(*)

  • std::vector

MATLAB 인수(스칼라 또는 배열)

C++ 파라미터 유형(스칼라 또는 배열)
객체 이외의 유형

가장 가까운 유형 <———————————————————————> 가장 거리가 먼 유형

logical

bool
cpparray bool

int8_t
cpparray int8_t
uint8_t
cpparray uint8_t

int16_t
cpparray int16_t
uint16_t
cpparray uint16_t

int32_t
cpparray int32_t
uint32_t
cpparray uint32_t

int64_t
cpparray int64_t
uint64_t
cpparray uint64_t

float
cpparray float

double
cpparray double

double

double
cpparray double

float
cpparray float

int64_t
cpparray int64_t
uint64_t
cpparray uint64_t

int32_t
cpparray int32_t
uint32_t
cpparray uint32_t

int16_t
cpparray int16_t
uint16_t
cpparray uint16_t

int8_t
cpparray int8_t
uint8_t
cpparray uint8_t

std::complex<double>
cpparray std::complex<double>
std::complex<float>
cpparray std::complex<float>
std::complex<int64_t>
cpparray std::complex<int64_t>
std::complex<uint64_t>
cpparray std::complex<uint64_t>
std::complex<int32_t>
cpparray std::complex<int32_t>
std::complex<uint32_t>
cpparray std::complex<uint32_t>
std::complex<int16_t>
cpparray std::complex<int16_t>
std::complex<uint16_t>
cpparray std::complex<uint16_t>
std::complex<int8_t>
cpparray std::complex<int8_t>
std::complex<uint8_t>
cpparray std::complex<uint8_t>

single

float
cpparray float

double
cpparray double

std::complex<float>
cpparray std::complex<float>

std::complex<double>
cpparray std::complex<double>

   

[u]int8

[u]int8_t
cpparray [u]int8_t

[u]int16_t
cpparray [u]int16_t

[u]int32_t
cpparray [u]int32_t

[u]int64_t
cpparray [u]int64_t

float
cpparray float

double
cpparray double

std::complex<[u]int8_t>
cpparray std::complex<[u]int8_t>
std::complex<[u]int16_t>
cpparray std::complex<[u]int16_t>
std::complex<[u]int32_t>
cpparray std::complex<[u]int32_t>
std::complex<[u]int64_t>
cpparray std::complex<[u]int64_t>
std::complex<float>
cpparray std::complex<float>
std::complex<double>
cpparray std::complex<double>

[u]int16

[u]int16_t
cpparray [u]int16_t

[u]int32_t
cpparray [u]int32_t

[u]int64_t
cpparray [u]int64_t

float
cpparray float

double
cpparray double

std::complex<[u]int16_t>
cpparray std::complex<[u]int16_t>
std::complex<[u]int32_t>
cpparray std::complex<[u]int32_t>
std::complex<[u]int64_t>
cpparray std::complex<[u]int64_t>
std::complex<float>
cpparray std::complex<float>
std::complex<double>
cpparray std::complex<double>

 

[u]int32

[u]int32_t
cpparray [u]int32_t

[u]int64_t
cpparray [u]int64_t

float
cpparray float

double
cpparray double

std::complex<[u]int32_t>
cpparray std::complex<[u]int32_t>
std::complex<[u]int64_t>
cpparray std::complex<[u]int64_t>
std::complex<float>
cpparray std::complex<float>
std::complex<double>
cpparray std::complex<double>

  

[u]int64

[u]int64_t
cpparray [u]int64_t

float
cpparray float

double
cpparray double

std::complex<[u]int64_t>
cpparray std::complex<[u]int64_t>
std::complex<float>
cpparray std::complex<float>
std::complex<double>
cpparray std::complex<double>

   

복소수 double

std::complex<double>
cpparray std::complex<double>

std::complex<float>
cpparray std::complex<float>

std::complex<int64_t>
cpparray std::complex<int64_t>
std::complex<uint64_t>
cpparray std::complex<uint64_t>

std::complex<int32_t>
cpparray std::complex<int32_t>
std::complex<uint32_t>
cpparray std::complex<uint32_t>

std::complex<int16_t>
cpparray std::complex<int16_t>
std::complex<uint16_t>
cpparray std::complex<uint16_t>

std::complex<int8_t>
cpparray std::complex<int8_t>
std::complex<uint8_t>
cpparray std::complex<uint8_t>

 

복소수 single

std::complex<float>
cpparray std::complex<float>

std::complex<double>
cpparray std::complex<double>

     

복소수 [u]int8

std::complex<[u]int8_t>
cpparray std::complex<[u]int8_t>

std::complex<[u]int16_t>
cpparray std::complex<[u]int16_t>

std::complex<[u]int32_t>
cpparray std::complex<[u]int32_t>

std::complex<[u]int64_t>
cpparray std::complex<[u]int64_t>

std::complex<float>
cpparray std::complex<float>

std::complex<double>
cpparray std::complex<double>

 

복소수 [u]int16

std::complex<[u]int16_t>
cpparray std::complex<[u]int16_t>

std::complex<[u]int32_t>
cpparray std::complex<[u]int32_t>

std::complex<[u]int64_t>
cpparray std::complex<[u]int64_t>

std::complex<float>
cpparray std::complex<float>

std::complex<double>
cpparray std::complex<double>

  

복소수 [u]int32

std::complex<[u]int32_t>
cpparray std::complex<[u]int32_t>

std::complex<[u]int64_t>
cpparray std::complex<[u]int64_t>

std::complex<float>
cpparray std::complex<float>

std::complex<double>
cpparray std::complex<double>

   

복소수 [u]int64

std::complex<[u]int64_t>
cpparray std::complex<[u]int64_t>

std::complex<double>
cpparray std::complex<double>

     

char

cpparray char
char16_t
cpparray char16_t
char32_tcpparray char32_t

wchar_t
cpparray wchar_t

std::string
std::wstring
std::u16string
std::u32string

     

string형 스칼라
열거형 인수를 사용하여 함수 호출하기 항목을 참조하십시오.

enum      

string형 배열
문자형 벡터로 구성된 셀형 배열

std::vector<std::string>
std::vector<std::wstring>
std::vector<std::u16string>
std::vector<std::u32string>

char * []

     

C++ 데이터형 MyClass의 MATLAB 객체

MyClass 유형의 C++ 객체

      

MATLAB 클래스의 MATLAB 객체

지원 안 됨

      

디폴트 인수를 사용하여 함수 호출하기

C++ 함수가 디폴트 인수로 정의된 경우 하나 이상의 후행 인수를 제공하지 않고 이 함수를 호출할 수 있습니다. 함수 도움말은 디폴트 값을 보여줍니다. 예를 들어, arg의 유형이 double형이고 디폴트 값이 100이면 도움말에 다음이 표시됩니다.

clib.libname.funcname(arg)
    Input Arguments
      arg             double = 100

다음 명령문은 동일한 결과를 생성합니다.

clib.libname.funcname
clib.libname.funcname(100)

결과는 다를 수 있지만 다음 명령문도 올바릅니다.

clib.libname.funcname(99)

MATLAB은 정수 스칼라 및 부동소수점 유형에 대한 디폴트 인수를 지원합니다.

열거형 인수를 사용하여 함수 호출하기

입력 인수로 clib.libname.enum을 받는 C++ 라이브러리 libname의 C++ 함수 또는 메서드에 문자열을 전달할 수 있습니다.

예를 들어, 입력값으로 clib.libname.Days를 받는 함수 getValue를 포함하는 C++ 라이브러리 libname에 대한 MATLAB 인터페이스가 있다고 가정하겠습니다.

help clib.libname.getValue
getValue -  clib.libname.getValue Representation of C++ function getValue.

  RetVal = clib.libname.getValue(D)
    Input Arguments
      D              clib.libname.Days  

    Output Arguments
      RetVal         int32  

clib.libname.Days의 값을 표시하려면 다음을 입력하십시오.

doc clib.libname.Days
Enumeration Summary
Fri	
Mon	
Sat	
Sun	
Thu	
Tue	
Wed

clib.libname.Days.Sun 또는 문자열 "Sun"을 사용하여 getValue를 호출할 수 있습니다.

clib.libname.getValue(clib.libname.Days.Sun)
clib.libname.getValue("Sun")
ans = 106

액세스 위반 오류

라이브러리를 호출할 때 라이브러리가 디버그 모드가 아닌 릴리스 모드에서 컴파일되었는지 확인하십시오. 기타 일반적인 문제와 관련한 도움말은 Troubleshooting MATLAB Interface to C++ Library Issues 항목을 참조하십시오.

관련 항목