• 최종 바이너리는 .lib 파일이다. 
    • 실행파일에서 lib파일을 포함시키는 형식
  • lib 파일에 구현되어 있는 함수를 사용하는 exe는 lib 파일을 반드시 link 해야한다.
  • .c, .h, .lib 세 가지가 하나로 구성된다.
    • .c에 소스코드를 작성한다.
    • 정적 라이브러리를 가져다 사용하는 사람은 .h, .lib 2개가 필요하다.
      • .h에 정적 라이브러리에 사용할 함수의 선언이 작성되어 있다. ( 컴파일 타임에 필요 )
      • .lib에 함수의 선언에 대한 정의가 작성되어 있다. ( 링크 타임에 필요 )

 

📌 Visual Studio에서 정적 라이브러리 개발

#include <stdio.h>

int add_in_lib(int a, int b)
{
	puts("add_in_lib v1.0");
	return a + b;
}

 

 

위와 같은 함수 static_add.c에 생성하고 빌드를 누르면

 

 

main 함수가 없어서 진입점을 잡을 수 없다고 에러가 출력된다.

정적 라이브러리를 개발하려면 프로젝트 속성을 바꿔줘야한다.

 

 

구성형식을 위와 같이 정적 라이브러리로 변경하고 빌드하면 에러가 안나는 것을 확인할 수 있다.

 

위 코드는 우리가 개발한 함수고, 정적 라이브러리를 사용할 대상에게 파일을 만들어서 제공해줘야 한다.

프로젝트 하나를 더 만든다.

 

 

TestApp 프로젝트를 생성하고 testapp.c에 main 함수를 생성한 후 위에서 만들어준 add_in_lib 함수를 호출한다.

이 상태에서 빌드하면

 

 

add_in_lib를 찾을 수 없다고 하는 링크에러가 난다. 

 

 

add_in_lib를 선언 해주면 찾을 수는 있지만 안에 있는 내용을 알 수 없기 때문에 동일한 링크에러가 난다.

 

앞서 만든 정적 라이브러리의 위치를 알아야한다.

 

위 그림을 통해 Debug 폴더 아래에 staticAdd.lib가 있는 것을 확인할 수 있다.

 

 

#pragma comment(lib, "..\\Debug\\staticAdd.lib")

 

TestApp는 다른 프로젝트 이기 때문에 ..으로 우선 상위 폴더로 이동한 후 Debug 폴더 안에 있는 staticAdd.lib를 입력하면

정적 라이브러리를 사용할 수 있다. 


 

  • 정적 라이브러리는 앞서 언급했듯이 실행파일에 결합된다. 따라서 static_add.c 파일의 내용을 수정하면 TestApp 프로젝트를 새로 빌드해서 실행파일을 다시 만들어줘야한다.
  • 위와 같은 경로를 .h 파일에서 따로 작성하고 .h와 lib 파일을 사용하는 사람에게 제공해주면 보다 편리하게 정적 라이브러리를 사용할 수 있게 된다.

 

 

+ Recent posts