본문 바로가기
프로그래밍 이야기/기타

[MATLAB] MATLAB 코드를 C/C++언어 환경에서 실행하기 - 1부 MATLAB 환경 설정 및 package 생성

by meticulousdev 2022. 5. 29.
반응형

- 개발환경

    - Windows 10
    - MATLAB 2016b (필수 툴박스: MATLAB Compiler SDK)
    - Visual Studio Community 2019

    - 더 이상 매트랩을 구매하지 않아서 MATLAB 2016b에서 진행된다는 점에 대해 양해 부탁드립니다.

 

1. 위기를 기회로

    (잡설이라서 건너뛰고 읽으셔도 됩니다.) 글을 처음 시작하는 만큼 어쩌다 이러한 기술들(?)을 습득하게 되었는지 간단하게 이야기해보려고 합니다. 읽으시다가 본인의 상황과 비슷하다고 생각하시면 계속해서 읽으시면 됩니다. 어느 겨울날 여느 때와 다름없이 평범한 하루를 보내고 있었습니다. 그러다 갑자기 선배가 만들던 프로그램의 보완 작업을 담당하게 되었습니다. 처음에는 보완작업이라서 딱히 할 일이 없을 거라고 생각했지만 문제는 심각했습니다. 연산부라고 할만한 부분은 MATLAB으로 개발되었으며, GUI는 외주 업체에 의해서 C++로 진행되었습니다. 문제는 여기서 발생했습니다. 서로 다른 두 언어를 연결할 적합한 방법을 찾지 못했던 선배는 MATLAB에서 수십 가지 사례를 시뮬레이션하고 결과들을 데이터 파일에 저장해서 사용자가 시뮬레이션을 진행할때 마다 데이터 파일을 참고하여 GUI에 보여주게 만들어둔 것입니다. 사용자가 시뮬레이션 결과가 있는 사례를 실행할 경우 문제가 되지 않지만 그렇지 않다면 프로그램이 오류를 띄우게 됩니다. 모두가 알다시피 사용자는 개발자의 상상을 뛰어넘는 행동을 합니다. 상황을 파악하고 나서 정말 막막했습니다. 하지만 운이 좋게도 같이 작업하시던 분들이 뛰어난 덕분에 MATLAB을 DLL로 내보내어 C/C++에서 실행할 수 있는 방법을 찾아내게 되었고 이를 통해서 모든 문제는 해결되었습니다. 아마도 그때 개발한 프로그램을 지금은 아무도 쓰지 않는 프로그램이 되었을 테지만 이만큼 값진 경험을 없었습니다. 이제는 조금 인기가 떨어진 언어이지만 그래도 사용하는 분들이 있을 테니 제가 아는 것들을 글로 정리해보려고 합니다.

 

2. MATLAB Compiler SDK

    아마도 이 글을 읽고 계시는 분들은 기본적으로 매트랩이 설치되어 있을 것이며, 필요한 툴박스들을 설치하셨을 거라고 생각됩니다. 하지만 하나 확인하실 부분은 MATLAB Compiler SDK가 설치되어 있는지입니다. 이 기술을 한번 습득한 후의 장점(?)은 다른 언어로의 변환도 비슷해서 C/C++ 이외에도 MATLAB을 JAVA와 Python으로 넘겨줄 수 있다는 것입니다. 그외 변환 가능한 언어들은 아래의 링크에 나와있습니다. 다시 본론으로 돌아와서 MATLAB Compiler SDK 툴박스가 설치되어 있는지 확인해주시기 바랍니다. 

 

https://kr.mathworks.com/help/compiler_sdk/index.html

 

MATLAB Compiler SDK Documentation - MathWorks 한국

You can also select a web site from the following list: How to Get Best Site Performance Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location. Europe Belgium

kr.mathworks.com

 

3. 그냥 지나쳤던 오류 메시지

    아마도 매트랩을 설치를 완료하고 나서 다음과 같은 메시지를 보신적이 있을 겁니다. 저도 이전에는 한 번도 관심을 가지지 않던 내용들입니다. 하지만 본 작업을 위해서는 상당히 중요한 메시지입니다.

 

제품 구성 참고 사항

MATLAB  Compiler SDK 0.0 (각자의 버전) 에는 다음이 필요합니다.
...
● COM 컴포넌트, C 및 C++ 공유 라이브러리를 만들려는 경우 지원되는 컴파일러
...

 

위의 경고를 무시하고 Shared Library 생성을 진행하면 다음과 같은 오류가 발생합니다. Shared Library 생성 방법은 잠시 후에 설명하겠습니다.

 

 

4. 설치 및 환경 설정

    아래의 링크는 앞서 발생한 문제를 해결하기 위해 참고했던 MATLAB Answers의 게시글입니다. 

https://kr.mathworks.com/matlabcentral/answers/95039-why-does-the-sdk-7-1-installation-fail-with-an-installation-failed-message-on-my-windows-system

 

Why does the SDK 7.1 installation fail with an "Installation Failed" message on my Windows system? -

Had the same problem, followed the above procedure and it worked, after spending a whole day digging other solutions elsewhere. Why such a simple task should be so overly complicated?

kr.mathworks.com

해당 링크의 글을 따라 하셔도 되고 다음에 이어지는 설명을 따라하셔도 됩니다. 먼저 제어판 > 프로그램 제거를 열어서 기존에 설치된 Microsoft Visual C++ 2010 redistributable package (x86과 x64 모두)들을 삭제합니다. 그리고 아래의 파일들을 순서대로 설치합니다. 설치 순서는 중요합니다!

 

1) winsdk_web.exe

2) VC-Compiler-KB2519277.exe

3) vcredist_x86.exe & vcredist_x64.exe

 

1) winsdk_web.exe 설치 링크

Download Microsoft Windows SDK for Windows 7 and .NET Framework 4 from Official Microsoft Download Center

 

Download Microsoft Windows SDK for Windows 7 and .NET Framework 4 from Official Microsoft Download Center

Important! Selecting a language below will dynamically change the complete page content to that language. Download The Windows SDK provides tools, compilers, headers, libraries, code samples, and a new help system that developers can use to create applicat

www.microsoft.com

 

2) VC-Compiler-KB2519277.exe 설치 링크

Download Microsoft Visual C++ 2010 Service Pack 1 Compiler Update for the Windows SDK 7.1 from Official Microsoft Download Center

 

Download Microsoft Visual C++ 2010 Service Pack 1 Compiler Update for the Windows SDK 7.1 from Official Microsoft Download Cente

Important! Selecting a language below will dynamically change the complete page content to that language. Chinese (Simplified)Chinese (Traditional)EnglishFrenchGermanItalianJapaneseKoreanRussianSpanish Download Install this update to restore the Visual C++

www.microsoft.com

 

3) vcredist_x86.exe & vcredist_x64.exe 설치 링크

Download Microsoft Visual C++ 2010 Service Pack 1 Redistributable Package MFC Security Update from Official Microsoft Download Center

 

Download Microsoft Visual C++ 2010 Service Pack 1 Redistributable Package MFC Security Update from Official Microsoft Download C

Important! Selecting a language below will dynamically change the complete page content to that language. Chinese (Simplified)Chinese (Traditional)EnglishFrenchGermanItalianJapaneseKoreanRussianSpanish Download A security issue has been identified leading

www.microsoft.com

 

5. Shared Library 생성

    모두 설치가 완료되면 MATLAB을 재실행합니다. 그리고 테스트를 위해서 아래와 같이 간단한 코드를 작성합니다.

 

add.m

function c = add(a, b)

c = a + b

end

 

이제 APP > APPLICATION DEPLOYMENT > Library Compiler를 실행합니다. 저는 C++ Shared Library를 먼저 만들어 보겠습니다. TYPE에서 C Shared Library를 선택한 후 EXPORTED FUNCTIONS에 앞서 만든 함수를 추가합니다. 

 

오른쪽을 보시면 2가지 설정이 있습니다. 둘 중 상황에 맞는 걸 선택하시면 됩니다.

● Runtime downloaded from web : 실행에 필요한 runtime을 웹에서 다운로드

● Runtime included in package : 실행에 필요한 runtime을 함께 생성

 

설정을 완료하면 Package 버튼을 누릅니다. 정상적으로 환경설정이 되었다면 아래와 같이 완료된 창이 나옵니다.

 

 

생성이 완료되면 프로젝트 이름과 동일한 이름의 폴더에 3개의 폴더가 생성됩니다.

 

1) for_redistribution : 앞서 설정한 runtime 설치 파일이 들어있습니다.

2) for_redistribution_files_only : 제일 중요한 파일들이 들어 있습니다.

- 헤더 파일 (.h)

- 동적 라이브러리 파일 (.dll)

- 정적 라이브러리 파일 (.lib)

3) for_testing : 테스트 예시가 들어 있습니다. 

 

여기까지가 MATLAB에서 DLL로 파일을 내보내는 방법입니다. 다음 편에서는 Visual Studio의 세팅과 실행을 다뤄보겠습니다.

https://meticulousdev.tistory.com/entry/MATLAB-MATLAB-코드를-CC언어-환경에서-실행하기-2부-Visual-Studio-설정-및-실행

 

[MATLAB] MATLAB 코드를 C/C++언어 환경에서 실행하기 - 2부 Visual Studio 설정 및 실행

- 개발환경 - Windows 10 - MATLAB 2016b (필수 툴박스: MATLAB Compiler SDK) - Visual Studio Community 2019 - 더 이상 매트랩을 구매하지 않아서 MATLAB 2016b에서 진행된다는 점에 대해 양해 부탁드립니다. 1..

meticulousdev.tistory.com

 

긴 글 읽어주셔서 감사합니다. 
글과 관련된 의견은 언제든지 환영입니다.
반응형

댓글