따..딱히 공부하려고 포스팅하는 건 아니니까..!
컴파일과 링크 본문
컴파일
프로그래밍 코드를 다른 프로그래밍 코드로 번역하는 과정, 이 때 만들어지는 것이 오브젝트 파일이다.
즉, 오브젝트 파일을 만드는 과정이다.
링크
만들어진 오브젝트 파일을 이어주어 결과적으로 실행파일을 만드는 과정이다.
예를 들어, A 파일이 있다고 하자.
A 파일에는 헤더파일과 그 헤더파일에 정의되어 있는 함수와 변수들이 있다.
이때 A 파일은 각각 문법적 오류가 없기 때문에 컴파일했을 때에는 정상적으로 작동한다.
그러나 A 파일 자체만으로는 실행 불가능하다.
왜냐하면 A 파일만 보았을 때는 결과적으로 무엇을 실행해야하는지 정의되어있지 않기 때문이다.
즉, A 파일에 선언된 헤더파일의 정보가 필요한데,
이 어딘가에 있을 헤더파일을 A 파일과 이어주는 과정을 '링크'라고 한다.
이렇게 컴파일과 링크를 나누어 하는 이유는 무엇일까??
1. 소스 기밀을 유지할 수 있다.
여러 코드파일이 합쳐져서 실행파일 하나가 만들어진다. A 파일과 B 파일이 있다고 하자. A 파일은 A 실행 프로그램을 만들고 B 파일은 B 실행프로그램을 만든다. 그런데 A 프로그램의 기능과 B 프로그램의 기능을 가진 다른 C 프로그램을 만들고자 한다. 이때 A 파일의 소스코드와 B 파일의 소스코드를 합쳐야되는데 회사차원에서 소스코드를 남에게 보여준다는 것은 큰 기밀유출이다. 그래서 이 소스코드 대신 보여주는 것이 오브젝트 파일이다.
2. 컴파일 시간을 줄일 수 있다.
한번에 실행파일까지 모두 만드는 것이 아니므로 시간이 상대적으로 적게 든다.
3. 분업화가 가능하다.
서로 다른 소스코드를 짜 각각 오브젝트 파일을 만들고 나중에 오브젝트 파일만 모아 합쳐 실행파일을 만들면 되므로 분업화가 가능하다.
4. 확장성과 이식성을 높일 수 있다.
예를 들어, 자동차라는 프로그램을 새로 만들고 싶은데, 예전에 자전거라는 프로그램을 만들면서 짜놓은 '바퀴'의 오브젝트 파일이 있다. 이때 자동차의 바퀴 부분은 새로 코드를 짤 필요 없이 이 바퀴라는 오브젝트 파일을 바로 적용하면 된다.
'C/C++' 카테고리의 다른 글
HEAP CORRUPTION DETECTED 오류와 해결방법 (0) | 2015.02.11 |
---|---|
추상화(Abstraction) (0) | 2015.02.05 |
#define보다 const가 더 유용한 이유 (0) | 2014.12.09 |
포인터(Pointer)와 레퍼런스(Reference) (0) | 2014.12.09 |
변수와 메모리공간 (0) | 2014.12.02 |