라이브러리: 이미 만들어진 코드나 바이너리를 가져와서 프로그래밍 할 때 사용할 수 있는 콜렉션.
대표적으로 Standard Library가 있다. 자주 사용하는 <array> <vector> <string> <iostream> 등이 이에 해당한다.
1. 라이브러리의 종류
1) Header only
일반적으로 코드를 받게 되면 헤더 안에 모든 게 정의되어 있어서 이 헤더를 include 하여 사용하는 경우를 말한다.
2) Static library
윈도우에서는 .lib 확장자, 리눅스에서는 .a 확장자로 나타난다.
이 라이브러리를 빌드 프로세스에서 가져와서 링크 시켜준다고 생각하면 된다.1
3) Dynamic library
로드 타임에 바인딩 할 수도, 런 타임에 바인딩 할 수도 있는 라이브러리.
로드 타임: 프로그램 실행될 때 로더가 프로세스를 실행시킬 때 라이브러리를 가져와서 바인딩 하는 경우.
런타임: 프로세스가 실행 과정 중간에 라이브러리를 가져와서 바인딩을 시켜주는 경우.
다이나믹 라이브러리의 경우 윈도우에서는 .dll, 리눅스에서는 .so 확장자 사용.
2. Static Libary
Static library를 이해하기 위해서는 전체 빌드 프로세스를 이해하고 있어야 한다. (이전 게시글 참고할 것)
마지막 링크 과정에서는,
각 오브젝트 파일에서 실제로 불려지는 코드와 데이터, 함수만 골라서 링커의 optimization rule에 따라서 재배치하게 됨.
relocation, optimization 과정.
여기서 하나의 static library를 만들고 사용할 수 있는데,
1) 링커가 하나의 실행 파일을 만들기 전에, 오브젝트 파일들을 모아서(archive) 하나의 파일로 만들어 준다.
2) 그리고 이 파일 이름을 lib xxx.lib 혹은 .a 라고 붙여주면 이것이 하나의 static library 파일이 된다.
3) 스태틱 라이브러리가 준비 되었다면 링커는 스태틱 라이브러리 파일 안에서 실제로 불려지게 되는 코드와 데이터 파트를 가져와서 relocation, optimization을 통해 하나의 실행파일(exe)를 만든다.
결론
스태틱 라이브러리는 오브젝트 파일들을 모은 하나의 파일이다. 그렇기 때문에 오브젝트 파일을 이용하여 링크를 한 것과 크게 다르지 않은 빌드 프로세스를 갖는다.
'모던C++ > 컴파일 프로세스 Compile Process' 카테고리의 다른 글
3. extern, static (0) | 2022.07.12 |
---|---|
2. PreProcessor 프리프로세서 - 전처리기 (0) | 2022.07.12 |
1. 헤더 파일의 의미, 사용법 (0) | 2022.07.11 |
0. C++ 빌드 프로세스, 컴파일 프로세스 (0) | 2022.07.11 |