본문 바로가기
Matlab & Simulink

MAT파일을 C/C++에서 읽기

by Humaneer 2009. 11. 6.

MAT File이란?


MAT File은 .mat의 확장자를 가진 파일형식으로 매트랩에서 사용하는 데이터(or 변수)를 바이너리화한 파일이다. 예를 들면  int a = 10, b = 5; float c = 0.5f; 3개의 변수가 메모리에 올라가 있을 때, 이 것을 바이너리 파일로 저장한 것이 .mat파일이고 .mat파일에 접근하면 a, b, c의 데이터를 그대로 써먹을 수가 있는 것이다. 변수명 역시 그대로 써먹을 수가 있다. 그리고 .mat파일은 매트랩에서는 save라는 함수를 통해 간단하게 생성할 수가 있고, C/C++, JAVA, FORTRAN등 다른 프로그래밍 언어에서도 생성 및 접근이 가능하다. 구글링 or 매트랩 홈페이지를 가면 이놈이 무엇인지 더욱더 확실하게 definition을 얻을 수 있을 것이다.

C/C++ 에서 .mat파일 API 써먹기


예제로 사용할 C파일은 'matlab_root\R2008a\extern\examples\eng_mat' 디렉토리에 있는 matdgns.c 파일이다. 이 파일 말고도 C/C++에서 .mat파일을 사용하는 좋은 예제파일이 examples디렉토리에 많이 있다.+_+  소스 코드의 길이가 스크롤의 압박이므로 자세히 보려면 소스보기를 클릭하면 된다.



주석을 보면 알겠지만, .mat파일에 접근하기 위해 매트랩에서 제공하는 C/C++용 API 함수를 호출함을 알 수 있다. 이 예제에 있는 함수 말고도 몇가지가 더 있는데 매트랩 홈페이지나 구글링을 하면 간단하게 찾을 수 있다.

VS 2005에서 빌드하기


요놈을 컴파일하고 링크하기 위해서는 몇가지 절차가 필요하다.
일단 몇가지 헤더파일을 include하기 위해 'matlab_root\extern\include' 디렉토리를 include 디렉토리에 추가한다. 물론 요놈은 어떤 IDE를 사용하는가에 따라 다르다. 참고로 vs2005에서는 아래와 같이 하면 된다.


그리고 라이브러리를 링크해주어야 한다. 라이브러리 디렉토리를 먼저 추가하게 되는데, 자신이 어떤 컴파일러를 사용하는가에 따라 달라진다. 기본적으로 매트랩에서는 LCC, WATCOM 그리고 MS의 C컴파일러를 위한 라이브러리를 제공하는데 나는 MS의 VS2005를 사용하므로 'matlab_root\extern\lib\win32\microsoft' 로 디렉토리를 정해주었다. VS2005에서는 아래와 같이 하면 된다.



마지막으로 라이브러리 파일을 설정해주어야 한다. libmx.lib, libmat.lib, libeng.lib 이 3개의 파일을 설정하여야 하는데 MS계열의 컴파일러는 #pragma commet(lib, "~~~~~~") 이라는 전처리명령을 통해 코드상에서 설정해줄 수도 있고, 프로젝트 속성에 가서 추가할 수도 있다. 아래는 프로젝트 속성에서 추가를 한 것.


아니면

#pragma comment(lib, "libmx.lib")
#pragma comment(lib, "libmat.lib")
#pragma comment(lib, "libeng.lib")

위의 코드를 추가하여야 한다.

이렇게 세팅해주면 컴파일과 링크가 모두 잘 되고 실행파일이 생성된다. 나머지 예제파일들도 위의 과정을 거치면 빌드가 잘 될 것이다. 물론 다 해보지는 않음 -_-; 그리고 예제파일을 보면서 매트랩에서 제공하는 .mat파일 관련 API 함수의 사용법을 익히면 될 것이다. ㅋ

조만간에 matlab에서 생성한 함수 .m파일을 dll로 변환하여 C/C++에서 사용하는 팁도 올릴예정.