Main Content

loadlibrary

C 공유 라이브러리를 MATLAB으로 불러오기

설명

loadlibrary(libname,hfile)은 헤더 파일 hfile에 정의된 C 공유 라이브러리 libname의 함수를 MATLAB®으로 불러옵니다. loadlibrary 함수는 C에서 호출 가능한 호출하는 함수와 C 컴파일러가 구문 분석할 수 있는 헤더 파일만 지원합니다. C++로 작성된 함수는 extern "C"로 선언되어야 합니다. 또는 C++ 라이브러리의 함수를 호출하려면 MATLAB에서 C++ 호출하기 항목을 참조하십시오.

예제

loadlibrary(libname)은 헤더 파일의 이름이 라이브러리 파일의 이름과 동일한 경우 라이브러리를 불러옵니다.

예제

loadlibrary(libname,hfile,Name,Value)는 하나 이상의 Name,Value 인수를 사용하여 라이브러리를 불러옵니다.

예제

loadlibrary(libname,@protofile)은 헤더 파일 대신 프로토타입 파일 protofile을 사용합니다.

[notfound,warnings] = loadlibrary(___)는 경고 정보를 반환하며, 위에 열거된 구문의 입력 인수를 포함할 수 있습니다.

예제

모두 축소

examples 폴더의 경로를 추가합니다.

addpath(fullfile(matlabroot,'extern','examples','shrlib'))

라이브러리의 함수를 표시합니다.

if not(libisloaded('shrlibsample'))
    loadlibrary('shrlibsample')
end
libfunctions('shrlibsample')
Functions in library shrlibsample:

addDoubleRef              addMixedTypes             addStructByRef            addStructFields           allocateStruct            deallocateStruct          exportedDoubleValue       getListOfStrings          multDoubleArray           multDoubleRef             multiplyShort             print2darray              printExportedDoubleValue  readEnum                  stringToUpper             

정리합니다.

unloadlibrary shrlibsample

헤더 파일 mylib.h가 포함된 라이브러리 mylib가 있다고 가정합니다. 이 헤더 파일에는 명령문 #include header2.h가 포함되어 있습니다. header2.h에 정의된 함수를 사용하기 위해 loadlibraryaddheader 옵션과 함께 호출합니다.

loadlibrary('mylib','mylib.h','addheader','header2')
if libisloaded('shrlibsample')
    unloadlibrary('shrlibsample')
else
    addpath(fullfile(matlabroot,'extern','examples','shrlib'))
end

라이브러리 shrlibsample의 별칭 이름 lib를 만듭니다.

loadlibrary('shrlibsample','shrlibsample.h','alias','lib')

만든 별칭 이름을 사용하여 함수 stringToUpper를 호출합니다.

str = 'This was a Mixed Case string';
calllib('lib','stringToUpper',str)
ans = 
'THIS WAS A MIXED CASE STRING'

정리합니다.

unloadlibrary lib

shrlibsample과, 이 파일의 헤더 파일 shrlibsample.h를 포함하는 폴더의 경로를 추가합니다.

addpath(fullfile(matlabroot,'extern','examples','shrlib'))

헤더 파일 shrlibsample.h에는 헤더 파일 shrhelp.h가 포함되어 있습니다. shrhelp.h가 다른 폴더에 있으면(예: c:\work) 'includepath' 옵션을 사용하여 MATLAB에 파일을 찾을 위치를 지정합니다.

loadlibrary('shrlibsample','shrlibsample.h','includepath','c:\work')

명령을 정리(Clean Up)합니다.

unloadlibrary shrlibsample

다음 예는 MATLAB shrlibsample 라이브러리에서 addMixedTypes 함수 이름을 별칭 이름 addTypes로 대체하는 방법을 보여줍니다. 별칭 이름을 정의하려면, 프로토타입 파일을 만든 후 프로토타입 파일을 헤더 파일로 사용하여 라이브러리를 불러오십시오.

쓰기 액세스 권한이 있는 폴더를 사용합니다.

cd('c:\work')

프로토타입 파일 mxproto.m을 만듭니다.

hfile = fullfile(matlabroot,'extern','examples','shrlib','shrlibsample.h');
[notfound,warnings] = loadlibrary('shrlibsample',hfile,'mfilename','mxproto')

MATLAB이 현재 폴더에 프로토타입 파일을 생성합니다. 경고 메시지는 무시하십시오.

프로토타입 파일에 별칭 이름을 추가합니다. MATLAB 편집기에서 파일을 엽니다.

edit mxproto.m

함수 addMixedTypes를 검색합니다.

다음 명령문은 별칭에 addTypes를 할당합니다.

fcns.alias{fcnNum}='addTypes';

fcnNum을 증분시키는 명령문 앞 라인에 명령문을 추가합니다. 새로운 함수 프로토타입은 다음과 같습니다(새로 추가된 명령문이 굵게 표시되어 있음).

%  double addMixedTypes ( short , int , double ); 
fcns.thunkname{fcnNum}='doubleint16int32doubleThunk';
fcns.name{fcnNum}='addMixedTypes'; 
fcns.calltype{fcnNum}='Thunk'; 
fcns.LHS{fcnNum}='double'; 
fcns.RHS{fcnNum}={'int16', 'int32', 'double'};
fcns.alias{fcnNum}='addTypes'; % Alias defined
fcnNum=fcnNum+1; % Increment fcnNum

프로토타입 파일을 사용하여 shrlibsample을 다시 불러옵니다.

unloadlibrary shrlibsample
loadlibrary('shrlibsample',@mxproto)

별칭 이름으로 함수를 호출합니다.

calllib('shrlibsample','addTypes',int16(127),int32(33000),pi)
ans = 3.3130e+04

명령을 정리(Clean Up)합니다.

unloadlibrary shrlibsample

입력 인수

모두 축소

공유 라이브러리 이름으로, 문자형 벡터로 지정됩니다. 이름은 대/소문자를 구분하며 시스템의 파일과 일치해야 합니다.

Microsoft® Windows® 시스템에서 libname은 공유 라이브러리(.dll) 파일의 이름을 나타냅니다. Linux® 시스템에서는 공유 오브젝트(.so) 파일의 이름을 나타냅니다. Apple Mac 시스템에서는 동적 공유 라이브러리(.dylib)를 나타냅니다. libname 인수에 파일 확장자를 포함하지 않으면 loadlibrary는 적절한 플랫폼 MEX 파일 확장자나 적절한 플랫폼 라이브러리 확장자를 포함하는 라이브러리를 찾으려고 시도합니다. MEX 파일 확장자 목록을 보려면 mexext를 사용하십시오.

MATLAB은 libname에서 이름 부분을 추출하는 방식으로 다른 공유 라이브러리 함수의 라이브러리를 식별합니다. 따라서, calllib 함수 등을 호출하는 경우에는 라이브러리 인수 이름에 경로나 파일 확장자를 포함시키지 않아야 합니다.

데이터형: char

C 헤더 파일의 이름으로, 문자형 벡터로 지정됩니다. 이름은 대/소문자를 구분하며 시스템의 파일과 일치해야 합니다. 파일 이름에 파일 확장자를 포함하지 않으면 loadlibrary는 확장자로 .h를 사용합니다.

데이터형: char

프로토타입 파일의 이름으로, 문자형 벡터로 지정됩니다. 이름은 대/소문자를 구분하며 시스템의 파일과 일치해야 합니다. @protofile은 프로토타입 파일에 대한 함수 핸들을 지정합니다. 프로토타입 파일을 사용할 경우 유효한 Name,Value 쌍 인수만 alias가 됩니다.

데이터형: char

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: loadlibrary('mylib','mylib.h','addheader','header2')

헤더 파일로, 'addheader'와 함께 문자형 벡터가 쉼표로 구분되어 지정됩니다. 파일 확장자를 포함시키지 않고 파일 이름을 지정해야 합니다.

addheader로 지정된 각 파일에는 기본 헤더 파일에 대응하는 #include 문이 있어야 합니다. 헤더 파일에 정의된 함수 중 MATLAB에서 사용하려는 함수만 불러오려는 경우 addheader를 사용하십시오.

MATLAB은 헤더 파일의 존재 여부를 확인하지 않으며 필요 없는 항목을 모두 무시합니다.

라이브러리의 대체 이름으로, 'alias'와 함께 문자형 벡터가 쉼표로 구분되어 지정됩니다. 지정된 이름을 라이브러리와 연결합니다. 이 라이브러리를 참조하는 모든 후속 MATLAB 함수 호출에서는 라이브러리가 언로드될 때까지 이 별칭을 사용해야 합니다.

종속 헤더 파일, 즉 헤더 파일 안에 포함된 헤더 파일의 추가 검색 경로로, 'includepath'와 함께 문자형 벡터가 쉼표로 구분되어 지정됩니다.

프로토타입 파일로, 'mfilename'과 함께 문자형 벡터가 쉼표로 구분되어 지정됩니다. 현재 폴더에 프로토타입 파일을 생성합니다. 이 프로토타입 파일 이름은 라이브러리 이름과 달라야 합니다. 라이브러리를 불러올 때 헤더 파일 대신 이 파일을 사용하십시오.

썽크 파일(Thunk File)로, 'thunkfilename'과 함께 문자형 벡터가 쉼표로 구분되어 지정됩니다. 디폴트 썽크 파일(Thunk File) 이름을 재정의합니다.

출력 인수

모두 축소

라이브러리에서 누락되었지만 헤더 파일에서 발견된 함수의 이름들로, 셀형 배열로 반환됩니다.

데이터형: cell

헤더 파일을 처리할 때 생성되는 경고로, 문자형 배열로 반환됩니다.

제한 사항

  • 지원되는 C 컴파일러가 있어야 하며 Perl을 사용할 수 있어야 합니다.

  • 라이브러리가 이미 메모리에 있는 경우에는 loadlibrary를 호출하지 마십시오. 이 조건을 테스트하려면 libisloaded를 호출하십시오.

  • loadlibraryMATLAB Compiler SDK™와 코드 생성 제품(예: MATLAB Coder)으로 생성된 라이브러리를 지원하지 않습니다.

  • MATLAB 공유 라이브러리 인터페이스는 함수 포인터 입력값이 있는 라이브러리 함수를 지원하지 않습니다.

  • 자세한 내용은 Limitations to Shared Library Support 항목을 참조하십시오.

세부 정보

모두 축소

프로토타입 파일

프로토타입 파일은 편집하여 헤더 파일 대신 사용 가능한 MATLAB 명령 파일입니다.

썽크 파일(Thunk File)

썽크 파일(Thunk File)은 MATLAB에서 생성된 64비트 라이브러리에 대한 호환성 계층입니다. 썽크 파일의 이름은 BASENAME_thunk_COMPUTER.c입니다. 여기서 BASENAME은 공유 라이브러리의 이름이거나, 지정된 경우 mfilename 프로토타입 이름입니다. COMPUTERcomputer 함수에서 반환하는 텍스트입니다.

MATLAB은 이 파일을 컴파일하고 BASENAME_thunk_COMPUTER.LIBEXT 파일을 만듭니다. 여기서 LIBEXT는 플랫폼별 디폴트 공유 라이브러리 확장자입니다(예: Windows의 경우 dll).

  • 이름이 같은 라이브러리 파일이 둘 이상 있는 경우에는 라이브러리 파일 이름을 사용하여 첫 번째 라이브러리를 불러옵니다. 그런 다음 alias 옵션을 사용하여 라이브러리를 추가로 불러옵니다.

  • alias 옵션을 라이브러리의 대체 이름으로 사용합니다. @protofile 인수를 사용하여 대체 헤더 파일을 불러올 수 있습니다.

버전 내역

R2006a 이전에 개발됨