본문 바로가기
프로그래밍

[MFC]라이브러리 개념과 사용 예제

by minimax95 2020. 6. 5.

이번 포스팅에서는 라이브러리에 대한 개념과 정적 라이브러리, 동적 라이브러리에 대해 알아보겠습니다.

 

라이브러리란 무엇일까요?

사전적 의미로는 컴퓨터 프로그램에서 자주 사용되는 부분 프로그램을 모아 놓은 것이라 정의되어 있습니다. 프로그램에서의 라이브러리는 소프트웨어를 만들 때 쓰이는 클래스나 서브루틴들의 모음이라 할 수 있습니다.

 

라이브러리는 정적 라이브러리(Statically linked library)와 동적 라이브러리(Dynamic Linking Library)로 구분할 수 있습니다. 정적 라이브러리는 컴파일러가 소스 파일을 컴파일할 때 참조되는 프로그램 모듈로 링크 타임에 실행파일에 포함됩니다.('. LIB' 확장자) 반면, 동적 라이브러리는 프로그램 수행 도중 해당 모듈이 필요할 때 불러 쓰는 프로그램 모듈로 실행파일에 코드가 포함되지 않고 실행 시간에 메모리에 로드되어 사용되고 확장자 형태는 '. DLL'로 되어 있습니다.

실행 파일 생성 과정을 그림으로 살펴보면 아래와 같습니다.

정적 라이브러리와 동적 라이브러리의 장단점을 표로 정리해 보면 아래와 같습니다.

  

정적 라이브러리

동적 라이브러리

장 점

- 배포 시 라이브러리 파일 미배포
- 라이브러리 설치 없이 실행 가능
- 프로그램 실행 후 빠른 처리 시간

- 실행파일 크기가 작아짐
- 프로그램 실행 시 로딩 시간 단축
- 특정 코드를 모듈화, 은닉화, 객체화

단 점

- 메모리 공간 낭비
- 실행 파일의 크기가 커짐
- 변경이 생기면 실행파일을 다시 컴파일

- 해당 라이브러리가 설치되어 있지   
  않으면 실행 불가

 

장단점을 예를 들어 설명하자면 단독으로 컴파일하여 실행파일 1MB, 라이브러리 100MB라 가정할 때, 정적 라이브러리 사용 시 컴파일 과정에서 해당 라이브러리를 포함시켜 최종 실행파일이 101MB가 되지만 동적 라이브러리 사용 시 완성된 프로그램 실행 간 동적으로 포함시켜 실행파일 1MB와 라이브러리 파일 100MB가 따로 존재하게 되고 필요시에만 메모리에 로드되는 차이가 있습니다.

 

실제 라이브러리를 이용하여 정적 라이브러리 참조 예를 살펴보겠습니다.

사용할 라이브러리는 오픈 소스 JRTP 라이브러리입니다.

VoIP 음성 통신 모듈 개발에 필수적인 라이브러리로, 먼저 압축파일을 다운로드하여 압축 해제 후 Cmake를 이용해서 솔루션을 아래와 같이 생성해줍니다.

 

MFC에서 jrtplib.sln 솔루션을 열고 아래의 그림처럼 INSTALL 프로젝트를 빌드하여 DEBUG와 RELEASE 버전의 라이브러리를 생성해 줍니다.

 

라이브러리를 생성하였다면 이제 사용하고자 하는 프로젝트 속성에 외부 라이브러리로 등록을 해야 합니다.

먼저 아래 그림처럼 구성 속성> C/C++의 추가 포함 디렉터리에 라이브러리를 등록해 줍니다.

다음은 구성 속성> 링커> 일반의 추가 라이브러리 디렉터리에도 라이브러리를 등록해 줍니다.

 

마지막으로 구성 속성> 링커> 입력의 추가 종속성에도 동일하게 등록시켜 줍니다.

이렇게 등록을 마치게 되면 헤더 파일을 인클루드 하여 필요한 함수들을 사용할 수 있습니다.

실제 VoIP 음성 통신을 위한 멤버를 선언하여 사용할 수 있습니다.

MFC에서는 라이브러리 참조가 조금 복잡한 편이지만 

코드상에서 아래와 같이 직접 라이브러리를 등록하여 사용하는 방법도 있습니다.

이상 라이브러리 개념과 사용 예제에 대한 포스팅을 마치도록 하겠습니다.

감사합니다.

댓글