분할 컴파일
관련된 소스코드끼리 묶어서 .h 파일과 .c 파일로 나눈다
그리고 그 파일들을 각각 컴파일한다 (분할 컴파일)
컴파일 결과인 .o 파일들을 한데 묶어서 빌드하는 방식이다
분할 컴파일 원리
빌드 프로세스에서
컴파일 단계까지는 각각의 .c 파일이 따로 컴파일된다
링크 단계에서 컴파일 완료된 .o 파일들을 묶어서 빌드한다
링킹 단계 전까지는 함수의 정의는 알 수 없다
선언부만으로 컴파일된다
링크 단계에서 각 함수의 정의 부분이 모여서 실행파일이 만들어진다
그래서 예를들어, 정의 부분 add() 함수의 매개변수 자료형이 서로 다르다면
컴파일 에러가 아닌 링크 에러가 발생한다
라이브러리(Library)
오브젝트 파일들을 모아서 묶어 놓은 파일을 라이브러리 파일이라고 한다
즉, 이 라이브러리 파일은 다시 컴파일할 필요가 없다
라이브러리는 정적 라이브러리와 동적 라이브러리로 구분된다
정적 라이브러리(Static-Link Library)
라이브러리 안에 있는 기계어를 최종 실행파일에 전부 그대로 복붙 하는 방식이다
정적 라이브러리의 장단점
장점
1. 함수의 주소가 공개 안되니 보다 안전하다
2. 정확한 버전의 라이브러리가 실행 파일 안에 내포되어 있다
3. 이미 실행 파일에 내포 되어 있으므로 실행 속도가 빠르다
단점
1. CPU 세대 별로 실행 파일을 만들어서 배포해야 한다
2. 정적 라이브러리의 소스코드가 바뀔 때마다 실행파일을 재배포해야 한다
3. 실행 파일의 크기가 커지므로, 필요한 메모리 크기가 더 커진다
동적 라이브러리(Dynamic-Link Library)
실행 파일 안에 여전히 구멍으로 남겨두고,
실행 파일을 실행할 때 OS가 링킹을 해준다
ex) 게임을 실행했는데 “컴퓨터에 d3dx11.dll이(가) 없어 프로그램을 시작할 수 없습니다.”
라는 오류가 발생한다면,
해당 동적 라이브러리가 없어서 링킹 할 수 없다는 뜻이다
동적 라이브러리의 장단점
장점
1. 실행 파일을 바꾸지 않고 동적 라이브러리 파일만 업데이트 가능하다
2. 여러 실행파일들이 같은 동적 라이브러리를 공유 가능하다
단점
1. DLL Injection
실행 중인 다른 프로세스에 특정 .dll 파일을 강제로 주입해 버릴 수 있다
2. DLL Hell
정부 홈페이지들을 방문할 때마다 같은 보안프로그램이지만
다른 버전을 받으라고 강요받는 문제가 이와 같은 경우이다
'C > [코드조선] C 핵심' 카테고리의 다른 글
[C] 조건부 컴파일과 매크로 함수 (0) | 2024.02.18 |
---|---|
[C] 전처리기 지시자와 컴파일 플래그 (0) | 2024.02.17 |
[C] 입출력 리디렉션, 커맨드 라인 인자 (0) | 2024.02.17 |
[C] 파일 입출력 (2) (0) | 2024.02.16 |
[C] 파일 입출력 (1) (0) | 2024.02.16 |