라이브러리(library)는 다른 프로그램들과 링크되기 위하여 존재하는, 하나 이상의 서브루틴(subroutine)이나 함수(function)들의 집합 파일 말하는데 함께 링크(link)될 수 있도록 보통 컴파일된 형태인 목적코드(object code) 형태로 존재한다. 라이브러리는 코드 재사용을 위해 조직화된 오래된 기법 중의 하나이며, 많은 다른 프로그램들에서 사용할 수 있도록, 운영체계나 소프트웨어 개발 환경 제공자들에 의해 제공되는 경우가 많다. 보통은 목적코드형태를 하나의 파일로 묶어 사용한다.
라이브러리가 생긴이유
1. 코드의 재사용
2. 코드의 부품화 실현
3. 소스를 제공하지 않아 기술 유출 방지
4. 사용자의 개발시간 단축
등의 이유가 있다.
프로그램 빌드 과정 - 컴파일 과정
링킹은 프로그램을 빌드(컴파일 과정에서 거치는 단계) 하는 과정에서 이뤄지는 말그대로 링크하는 과정이다.
큰 의미의 컴파일 과정
이 전체를 크게 컴파일 과정이라고 한다.
Compiling + Linking 이 전 구간을 큰 의미의 컴파일, 저 Linking 구간을 제외한 Compiling 부문을 작은 의미의 지칭한다.
우리가 C언어로 코드를 짰다고 하자. 그럼 이게 소스파일이다. Source.cpp (이름.cpp)
소스파일은 C언어나 java 등 이렇게 우리 인간들, 프로그래머들이 이해하기 쉽게 고급언어로 작성된 파일을 말한다.
그리고 빌드하면 (비쥬얼 스튜디오에서는 Ctrl + shift + b)
위 과정(컴파일링 후 링킹 과정)을 내부에서 진행한 후에 .exe파일을 딱 내보내주는거다.
링커(Linker)의 링킹(Linking) 과정
이렇게 만들어진 Object file들을 링커가 링킹해서 실행파일로 만든다!
컴퓨터가 점점 발전함에 따라 소스코드 양이 그만큼 늘어났고 한 파일에 모든 소스코드를 작성할 수 없게 되서 파일들을 분리해서 관리한다.
링커라는 프로그램은
1. 이런 여러 소스코드 파일들을 하나의 Object 파일로 합친다.
2. 여기에 라이브러리를 합쳐서 실행 파일을 만든다.
1번째 과정이다 여러 오브젝트 파일에 있는 동일한 섹션들을 하나의 덩어리로 합친다.
소스파일 그림에 cout는 cout이라는 클래스 라이브러리를 쓰기 때문에 사용할 수 있는거다 #Include <iostream>
그 .exe파일 만들기 위해서 오브젝트 파일들 하나로 다 링크하고 이 exe파일에다가 라이브러리를 집어넣어서 실행파일을 완성하는 작업이 linking 정확히는 static linking이다.
실행 파일이 만들어 지기 까지의 과정
1. 전처리 단계 - 전처리기 (cpp)
: #include, #define 등 #으로 시작하는 문법 사항이 적절히 전처리된 C 언어 소스파일 생성
2. 컴파일 단계 - 컴파일러 (cc1)
: C 언어 소스파일은 컴파일 과정을 거쳐 어셈블리 소스 파일이 됨
3. 어셈블 단계 - 어셈블러 (as)
:어셈블리 소스 파일은 어셈블 과정을 거쳐 목적 파일이 됨
4. 링크 단계 - 링커 (ld)
: 목적 코드는 라이브러리와 링크되어 실행 가능한 파일이 됨
.c => 전처리기 => .i => 컴파일러 => .s => 어셈블러 => .o(목적코드) or .a(라이브러리 파일) => 링커 => .exe(실행파일)
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] 파스칼의 삼각형 (Pascal's triangle) (0) | 2023.10.15 |
---|---|
[C/C++] 32bit 자료형 / 64bit 자료형의 크기 정리 (0) | 2023.10.13 |
[C++] 문자열 (string) 함수 모음 (0) | 2023.10.02 |
[C] 복합 대입 / 증감 연산자 (0) | 2023.10.02 |
[C++] Buffer Overflow (버퍼 오버플로우) 예시 (0) | 2023.09.27 |