본문 바로가기
운영체제/[ecourse] Windows Programming

3-1. Static Library

by 헛둘이 2022. 9. 8.
정적 라이브러리란?

연관성이 있는 함수가 담긴 오브젝트 파일들을 묶어서 배포할 수 있게 해주는 라이브러리

 

정적 라이브러리 빌드하는 방법
  • 소스가 있는 디렉터리로 이동
  • cl add.c 라고 적으면 링크까지 하라는 의미이므로 에러가 발생
  • cl add.c /c를 적으면 컴파일만 하라는 의미이므로 에러 발생x
  • 그러면 add.obj 파일이 만들어지는데 이런 함수 파일들을 여러 개 있는 경우
  • lib add.obj xxx.obj yyy.obj /out:출력파일이름.lib를 입력한다.
  • 그러면 정적 라이브러리 파일 .lib 파일이 만들어진다.

cl square.c /c로 obj 파일 생성

 

lib square.obj /out:customSquare.lib, lib파일 생성 완료

 

 

통합개발환경(VS)에서 빌드하는 방법
  • 처음 프로젝트를 만들 때 정적 라이브러리라는 프로젝트를 선택해야 한다.
  • 처음에 설정하지 않았더라도 프로젝트 메뉴 -> 속성 ->일반 -> 구성 형식 -> 정적 라이브러리 로 변경 가능하다.

 

 

 

 

 

 


정적 라이브러리 사용하기
  • 반드시 헤더 파일과 라이브러리 파일이 소스 파일과 같이 있어야 함.
  • 사용하는 방법은 만드는 것과 같이 2가지가 있다.

 

 

 

개발자 명령 프롬프트에서 빌드하는 법
  1. 소스가 있는 디렉터리로 이동한다.
  2. 어떤 함수를 호출하려면 헤더를 포함해야 한다.
  3. 헤더만 있어도 컴파일은 되니 cl main.c /c로 컴파일을 한다.
  4. link main.obj customSquare.lib 로 결합한다.
  5. 더 편한 방법은 cl main.c customSquare.lib 을 입력하면 한번에 결합 가능 하다.
  6. 그보다 더 편한 방법은 소스 코드에 아래 코드를 추가하고 빌드한다.
  7. #pragma comment(lib, "square.lib");
  8. 아니면 프로젝트 -> 속성 메뉴에서 링크 -> 입력 -> 추가 종속성에 이미 알려줄 수도 있다.

link main.obj customSquare.lib를 사용해서 lib파일과 main을 같이 빌드

#include <stdio.h>
#include <windows.h>
#include "square.h"

#pragma comment(lib, "customSquare.lib");

int main()
{
	int n = square(3);

	printf("result : %d\n", n);
}

 

주의사항
  • 개발자 명령 프롬프트에서 만든 lib파일은 개발자 명령 프롬프트에서 빌드해야 사용할 수 있다.
  • => VS에서 만든 lib 파일은 개발자 명령 프롬프트 빌드과정에 사용할 수 없다. (이유는 이후 강의에서 후술)
  • 반대로 VS에서는 개발자 명령 프롬프트에서 만든 lib 파일을 사용할 수 있으나 경고가 뜬다. 

'운영체제 > [ecourse] Windows Programming' 카테고리의 다른 글

3-3. 가상 주소 공간과 DLL  (0) 2022.09.12
3-2 Dynamic Library  (0) 2022.09.11
2-3. 라이브러리 개념  (0) 2022.09.07
2-2. 실행 파일 포맷  (0) 2022.09.07
2-1. 윈도우 핸들과 API  (0) 2022.09.06

댓글