Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

따..딱히 공부하려고 포스팅하는 건 아니니까..!

컴파일과 링크 본문

C/C++

컴파일과 링크

보즈리 2014. 12. 30. 20:03



컴파일

 프로그래밍 코드를 다른 프로그래밍 코드로 번역하는 과정, 이 때 만들어지는 것이 오브젝트 파일이다.

 즉, 오브젝트 파일을 만드는 과정이다.


링크

 만들어진 오브젝트 파일을 이어주어 결과적으로 실행파일을 만드는 과정이다.



예를 들어, 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
Comments