#2022.06.09
- 빌드 과정: 링크단계
- 링크 단계가 분리되어 있는 이유
- 라이브러리, 정적/동적
- 분할 컴파일과 전역 변수
1. 링크 단계 : 링커
- 입력: 링커는 모든 오브젝트 코드들을 모아다가 '구멍'을 메꾼 뒤 실행파일로 저장 (_add 함수 호출)
- 처리과정: 선언만 믿고 사용한 함수나 변수가 여전히 구멍으로 남아있다면? (구현을 하지 않았기 때문에)
- 링커 오류를 뱉을 수도
- 그 함수나 변수가 없어 실행할 방법이 없기에 경고가 아니고 오류
- 출력: 최종실행파일 (.exe, .out)
2. 링크 단계가 분리되어있는 이유

- .c 파일이 많이 있으면 구멍 메꿔주는 일이 매우 복잡함! (수많은 구멍을 컴파일 할 때 마다 메꾸기엔)
- .c파일 하나 컴파일 할 때마다 모든 함수를 찾아서 구멍을 매꿔줄 수 없음.
- 여러개의 .c 파일에서 동일한 외부함수를 사용할 경우 최종실행파일에 함수가 중복으로 들어가는 것도 방지!
★ .c 파일 하나씩 따로 컴파일해서 오브젝트 파일로 저장해 두는 방법이 낫다!
- 나중에 바뀐 .c파일만 컴파일해서 새로운 오브젝트 파일 생성
- 기존에 있던 오브젝트 파일들과 합쳐서 링크!
- 훨 빠르고 분리시켜 놓으니 간단해짐
3. 라이브러리, 정적/동적(dll) 라이브러리와 링크
: 라이브러리로도 빌드 가능!
- 라이브러리란??
- 함수등을 기계어로 변환 후 파일하나로 저장해 놓은 것
- 나중에 .c 파일에서 이 기능이 필요할 때 같이 링크해서 쓸 수 있음
- 라이브러리에는 정적/ 동적 두가지가 있음!


- 동적 라이브러리의 장점
- 실행 파일 크기가 작다
- 여러 실행파일이 동일한 라이브러리를 공유할 수 있다 => (메모리 절약)
- 여러 실행파일파일이 이름은 같지만 버전이 다른 동적 라이브러를 사용하면 dll지옥을 맛볼 수있음..
4. 분할 컴파일과 전역변수
- 분할 컴파일!
