본문 바로가기

System/Linux

라이브러리 만들기

1, 라이브러리(Library)

라이브러리는 유사한 기능을 하는 컴파일된 함수나 클래스의 집합입니다. 이미 컴파일되었기 때문에 다시 컴파일할 필요없이 다른 목적파일이나 라이브러리와 링크만 해서 사용할 수 있습니다.

라이브러리의 종류

  • 정적 라이브러리(lib) : 링크 시간에 실행파일(exe)에 포함된다.

    • 같은 라이브러리도 실행파일마다 각각 포함된다.
  • 동적 라이브러리(dll) : 실행파일에 포함되지 않고 실행 시간에 메모리에 로드된다.

    • 같은 라이브러리는 공유되며 각각 메모리를 차지하지 않는다.

 

아래 두 그림은 정적 라이브러리와 동적라이브러리의 동작 방법입니다.

 


 

 정적 라이브러리는 링크 시간에 실행파일에 포함됩니다. 기억하세요.

 

 



 

 동적라이브러리는 실행시간에 실행 프로세스 주소 공간으로 로드됩니다.

 

2, 라이브러리 만들기

라이브러리를 만들어 보도록 하겠습니다. 라이브러리는 컴파일러나 IDE등에 따라 만드는 방법이 다릅니다. 이곳에서는 Visual Studio 2008을 사용합니다.

 

분할 컴파일에서 사용했던 예제와 소스를 가지고 정적 라이브러리를 만들도록 하겠습니다. 동적 라이브러리는 Windows 프로그램에서 만들어 보도록 하겠습니다. 만드는 방법은 비슷합니다.

 

2.1 서버 측 라이브러리 만들기

1, 서버 측 라이브러리를 만들기 위한 새 프로젝트를 생성합니다. 이름은 PrintSwap

 

 

 

2, 응용 프로그램 설정에서 정적 라이브러리를 선택하고 미리 컴파일된 헤더를 체크 해제합니다.

 

 

 

3, 분할 컴파일에서 사용했던 소스와 헤더를 추가합니다. 프로젝트 오른쪽 마우스-> 추가 -> 기존항목 추가 ㅡㅡ;; (이 라이브러리 프로젝트에서는 헤더를 포함하지 않아도 잘 작동합니다. 헤더는 클라이언트 코드를 위해 준비했었습니다. 여기서는 Print와 Swap에서 서로 함수를 호출하지 않기 때문에 헤더를 포함할 필요 없지만, 보통 실제 라이브러리에서는 여러 함수가 있고 서로 함수를 호출하고 사용하므로 포함하게 됩니다.

 

 

 

4, 빌드및 실행하면 아래와 같은 창이 뜹니다. 아래창은 라이브러리와 상관없는 창으로 라이브러리는 스스로 실행될 수 없으므로 이 라이브러리를 실행할 실행파일(exe)을 찾는 창입니다. 정적 라이브러리 만들기 성공입니다. ㅡㅡ;

 

 

 

5, Debug 모드로 컴파일 했다면 아래 폴더에 라이브러리 파일이 있을 것입니다.(PrintSwap.lib)

5_실행파일.png 

 

2.2, 클라이언트 측 사용 프로그램 만들기

1, 클라이언트 측 응용프로그램을 만들기 위한 프로젝트를 생성합니다. 이름은 LibraryApp

 

 

 

2, 프로젝트 설정에서 빈 프로젝트로 설정합니다.

 

 

 

3, 분할 컴파일에서 사용했던 Main.cpp 파일을 추가합니다.

 

 

 

 4, 라이브러 파일을 링크합니다. 실행파일에 포함하기 위해~ 프로젝트 -> 속성에서

 

 

 

5, 링커 -> 명령줄에 PrintSwap.lib를 이 프로젝트에 포함

 

 

 

6, 라이브러리 파일과 헤더를 응용프로그램 디렉토리에 복사합니다. 복사하지 않는 방법도 있지만 우리는 따끈따끈한 라이브러리를 제삼자에게 구입하고 응용프로그램 디렉토리에 넣었다고 가정합니다. 분할 컴파일에서도 이야기했지만 라이브러리 제공자는 3가지를 제공해야 합니다.

첫째, 라이브러리

둘째, 헤더 파일

셋째, 사용 도움말

 

 

 

 

7, 컴파일, 실행하면 잘~알! 실행됩니다.

 

 

 

라이브러리 만들기를 마지막으로 'C언어 QuickStart1'을 마무리합니다. 감사합니다. ㅠ.ㅠ......... 넘 기쁩니다. ㅠ.ㅠ... 자기만족!!

도움이 되셨길 바라며 열공 부탁드립니다.