- 최종 바이너리는 .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 파일을 사용하는 사람에게 제공해주면 보다 편리하게 정적 라이브러리를 사용할 수 있게 된다.