Main Content

Linux에서의 헤더 및 C++ 컴파일 라이브러리 파일

이 예제에서는 clibPublishInterfaceWorkflow를 호출하여 Linux®용 C++ 라이브러리 matrixOperations에 대한 MATLAB® 인터페이스를 만드는 방법을 보여줍니다. 이 예제의 경우 라이브러리는 헤더 파일 matrixOperations.hpp 및 공유 오브젝트 파일 libmwmatrixOperations.so에 의해 정의됩니다.

MATLAB은 다음 폴더에서 이러한 파일을 제공합니다.

fullfile(matlabroot,"extern","examples","cpp_interface");

이 라이브러리에 대해 matrixlib라는 인터페이스를 만들려면 워크플로 스크립트에서 라이브러리 정의 파일을 생성하고, 누락된 구문을 정의하고, 인터페이스를 빌드한 다음 인터페이스를 테스트하는 단계를 수행합니다. 퍼블리시 과정을 반복해야 하는 경우, 파라미터를 복원하고 별도 프로세스(out-of-process) 실행 모드를 활성화하기 위해 추가적인 단계를 수행할 수 있습니다. 그런 다음 퍼블리시된 인터페이스를 다른 사용자와 공유할 수 있습니다.

워크플로 스크립트 만들기

쓰기 가능한 폴더로 이동하고 clibPublishInterfaceWorkflow를 호출합니다. 대화 상자에서 워크플로 스크립트의 이름을 지정합니다(예: publishmatrixlib.mlx). 워크플로 스크립트에는 인터페이스 퍼블리시를 안내하는 단계가 들어 있습니다. 이 스크립트를 사용하여 인터페이스 퍼블리시를 위한 파라미터를 저장합니다. 모든 플랫폼에서 동일한 스크립트를 사용할 수 있습니다.

참고

워크플로 스크립트를 사용하면 여러 MATLAB 세션에서 인터페이스를 반복적으로 생성, 정의, 빌드, 테스트할 수 있습니다. 그러나 스크립트는 기존 정의 파일 덮어쓰기 옵션을 사용하여 다시 만든 라이브러리 정의 파일에 대한 편집 내용은 저장하지 않습니다.

Step 1: GENERATE

먼저, 라이브러리 정의 파일을 생성합니다. 워크플로 스크립트에는 이 단계에 대한 C++ 인터페이스 생성 라이브 편집기 작업이 포함되어 있습니다. 이 작업을 사용하여 라이브러리를 구성하는 파일을 선택하고 라이브러리 정의 파일을 생성하기 위한 옵션을 설정합니다.

파일 선택

라이브러리는 matrixOperations.hpp 헤더 파일과 libmwmatrixOperations.so 공유 오브젝트 파일에 의해 정의됩니다. 라이브러리 유형은 디폴트 설정인 헤더 및 컴파일된 라이브러리 파일(Headers and compiled library files)입니다.

라이브러리 시작 경로를 설정하려면 폴더 fullfile(matlabroot,"extern","examples","cpp_interface")를 찾아 폴더 선택을 클릭합니다.

헤더 파일을 선택하려면 찾아보기를 클릭하여 파일 matrixOperations.hpp를 엽니다.

헤더 파일은 cppshrhelp.hpp 헤더 파일에 종속되어 있습니다. 라이브러리 시작 경로의 폴더로 이동하고 폴더 선택을 클릭합니다.

컴파일된 라이브러리 파일을 선택하려면 glnxa64 폴더를 찾은 다음 libmwmatrixOperations.so 파일을 엽니다.

구성 선택

이 예제에서 C++ 컴파일러g++로 설정되어 있습니다.

인터페이스 라이브러리 이름matrixlib로 변경합니다. 이 이름을 clib와 함께 사용하여 MATLAB에서 기능을 호출합니다. 예를 들어, 라이브러리 객체 Mat를 만드는 경우 명령 프롬프트에서 다음을 입력합니다.

clib.matrixlib.Mat

출력 폴더가 쓰기 가능한 폴더인지 확인합니다.

인터페이스를 개발하는 동안 정의 파일을 다시 만들 수 있도록 기존 정의 파일 덮어쓰기 체크박스를 선택합니다.

(선택 사항) C++ 라이브러리 설정 지정

이 라이브러리에 대한 인터페이스를 빌드하는 데 선택적 C++ 라이브러리 설정은 필요하지 않습니다.

(선택 사항) 정의 구성 지정

이 라이브러리에 대한 인터페이스를 빌드하는 데 선택적 정의 구성은 필요하지 않습니다.

결과 표시

기본적으로 정의 파일을 생성할 때 함수는 사용 가능한 구문(라이브러리의 클래스 및 함수)을 표시합니다. 인터페이스를 개발하는 동안 사용 불가능한 구문 표시 체크박스도 선택하십시오. 이를 통해, 지원되지 않기 때문에 포함되지 않은 구문이 뭔지 알 수 있습니다.

정의 파일 생성

Generate definition file을 클릭합니다. 스크립트가 진행률을 표시하고 지정된 출력 폴더에 라이브러리 정의 파일 definematrixlib.m을 생성합니다.

Warning: Some C++ language constructs in the files for generating interface file are not supported and not imported.

Using g++ compiler.
Definition file definematrixlib.m contains definitions for 10 constructs supported by MATLAB.
- 5 constructs are fully defined.
- 5 constructs partially defined and commented out.

To include the 5 undefined constructs in the interface, uncomment and complete the definitions in definematrixlib.m.
To build the interface, call build(definematrixlib).
MATLAB Interface to matrixlib Library

Class clib.matrixlib.Mat

  Constructors:
    clib.matrixlib.Mat(clib.matrixlib.Mat)
    clib.matrixlib.Mat()

  Methods:
    uint64 getLength()
    
  No Properties defined

Functions
clib.matrixlib.updateMatByX(clib.matrixlib.Mat,int32)

여러 세션에서 개발을 가능하게 하는 방법

인터페이스를 퍼블리시하는 동안 단계를 반복하거나 publishmatrixlib.mlx 스크립트를 닫았다가 다시 열거나 MATLAB을 다시 시작하는 경우가 있을 수 있습니다. 이러한 워크플로우를 수행할 때는 다음 섹션에 있는 지침을 따르십시오.

  • MATLAB 세션 간에 작업 공간 변수를 유지합니다. Restore library definition 섹션에서 outputFolderPath 변수를 출력 폴더 파라미터의 값으로 설정합니다. libraryNameForInterface 변수를 인터페이스 라이브러리 이름 파라미터 matrixlib로 설정합니다. 그런 다음 섹션을 실행합니다. 자세한 내용은 Restore Library Definition 항목을 참조하십시오.

  • Enable out-of-process execution mode 섹션을 실행해 보십시오. 인터페이스를 개발하는 동안 이 모드를 사용하면 테스트하는 동안 MATLAB을 다시 시작할 필요가 없습니다. 라이브러리의 기능을 호출한 후 Unload out-of-process library 섹션을 실행하여 라이브러리를 언로드할 수 있습니다. 자세한 내용은 Load Out-of-Process C++ Library 항목을 참조하십시오.

Step 2: DEFINE

라이브러리 정의 파일을 생성했을 때 MATLAB에서 5개 구문이 부분적으로 정의되었다고 보고했습니다. 기능을 완전히 정의하려면 definematrixlib.m 파일을 편집하십시오. 파일을 편집하려면 DEFINE 섹션을 실행하십시오.

라이브러리 정의 파일을 스크롤하여 이 구문에 대해 주석 처리된 코드 블록을 찾습니다. MATLAB은 다음 함수에서 사용하는 인수의 크기를 자동으로 결정할 수 없습니다.

  • setMatMat 클래스의 C++ 메서드

  • getMatMat 클래스의 C++ 메서드

  • copyMatMat 클래스의 C++ 메서드

  • addMat — C++ 함수

  • updateMatBySize — C++ 함수

matrixOperations 라이브러리의 도움말 문서를 바탕으로 인수 정의문에 <SHAPE>의 값을 지정할 수 있습니다. 자세한 내용은 Define Missing SHAPE Parameter 항목을 참조하십시오.

  1. 각 구문에 대해 이 구문을 정의하는 명령문의 주석을 해제합니다.

  2. <SHAPE> 인수를 다음 값으로 바꿉니다.

    구문

    인수 이름

    인수 C++ 정의

    설명

    <SHAPE>를 대체할 값

    setMatsrcint [] src

    행렬의 길이는 입력 인수 len에 의해 정의됩니다.

    "len"
    getMatRetValint const *

    출력 인수의 길이는 입력 인수 len에 의해 정의됩니다.

    "len"
    copyMatdestint * dest

    dest의 길이는 입력 인수 len에 의해 정의됩니다.

    "len"
    addMatmatMat const * mat

    이 함수는 단일 mat 인수를 받습니다.

    1
    updateMatBySizearrint * arr

    arr의 길이는 입력 인수 len에 의해 정의됩니다.

    "len"
  3. 정의 파일을 저장하고 닫습니다.

  4. 파일에서 편집한 내용을 확인하려면 Confirm edits and run summary 섹션을 실행합니다. 파일에서 보고된 오류를 모두 해결합니다. summary 함수는 이제 인터페이스에 setMat, getMat, copyMat, addMat, updateMatBySize가 포함되어 있음을 보여줍니다.

MATLAB Interface to matrixlib Library

Class clib.matrixlib.Mat

  Constructors:
    clib.matrixlib.Mat(clib.matrixlib.Mat)
    clib.matrixlib.Mat()

  Methods:
    setMat(clib.array.matrixlib.Int)
    clib.array.matrixlib.Int getMat(uint64)
    uint64 getLength()
    copyMat(clib.array.matrixlib.Int)

  No Properties defined

Functions
int32 clib.matrixlib.addMat(clib.matrixlib.Mat)
clib.matrixlib.updateMatByX(clib.matrixlib.Mat,int32)
clib.matrixlib.updateMatBySize(clib.matrixlib.Mat,clib.array.matrixlib.Int)

Step 3: BUILD

라이브러리에 대한 matrixlib 인터페이스를 빌드하려면 스크립트의 BUILD 섹션을 실행합니다.

Building interface file 'matrixlibInterface.so' for clib interface 'matrixlib'.
Interface file 'matrixlibInterface.so' built in folder '/home/Documents/MATLAB/matrixlib'.

To use the library, add the interface file folder to the MATLAB path.
addpath('/home/Documents/MATLAB/matrixlib')

참고

생성, 정의, 빌드 단계를 반복할 수 있습니다. 그러나 라이브러리의 함수에 대한 도움말을 표시하거나 라이브러리의 함수를 호출한 후에는 동일한 MATLAB 세션에서 definematrixlib 정의 파일을 업데이트할 수 없습니다. MATLAB을 다시 시작하거나, 구성 선택 섹션의 인터페이스 라이브러리 이름 파라미터를 변경하여 새 정의 파일을 만드십시오.

Step 4: TEST

Set up and copy run-time libraries

Set up and copy run-time libraries 섹션을 실행합니다. 이 라이브러리에는 추가 런타임 종속 관계가 없으므로 명령을 수정하지 않아도 됩니다.

Enable out-of-process execution mode

정의 파일을 변경해야 하는 경우, MATLAB을 다시 시작할 필요가 없도록 이 명령을 실행하여 별도 프로세스(out-of-process)로 인터페이스 라이브러리를 호출하는 기능을 설정합니다. 자세한 내용은 Load C++ Library In-Process or Out-of-Process 항목을 참조하십시오.

Call help on interface library

인터페이스 라이브러리에 대한 도움말을 표시하려면 Call help on interface library 섹션을 실행합니다.

Write code to call and test interface library

Write code to call and test interface library의 코드 섹션을 사용하여 다음 테스트를 작성합니다.

matObj = clib.matrixlib.Mat;   % Create a Mat object
intArr = [1,2,3,4,5];
matObj.setMat(intArr);     % Set the values to intArr
retMat = matObj.getMat(5)  % Display the values
retMat = 

  read-only clib.array.matrixlib.Int with properties:

    Dimensions: 5
     Resizable: 0

인터페이스 공유하기

다른 MATLAB 사용자와 인터페이스를 공유하려면 툴박스 설치(.mltbx) 파일을 만듭니다. Distribute MATLAB Interface to C++ Library의 지침에 따라 다음을 수행하십시오.

  • 툴박스 폴더를 인터페이스 파일 matrixlibInterface.so이 포함된 matrixlib 폴더로 설정합니다.

  • 컴파일된 라이브러리 파일 libmwmatrixOperations.so를 동일한 폴더에 저장합니다.

  • 네임스페이스(호출 구문)를 clib.matrixlib로 식별합니다.

참고 항목

관련 항목