간단하다. Linker는 object file을 executable file과 shared library로 변환한다. 그게 무슨 말인지 살펴 보자. Linker가 사용되는 경우, S/W 개발 과정은 C/C++/Fortran 등 특정 언어로 program code를 작성하는 과정으로 이루어지게 된다. (Java는 대체로 좀 다른데, Java는 보통 linker가 아니라 loader를 쓴다.) Compiler는 이 human-readable한 program code를, 또다른 human-readable 형식의 assembly code로 번역(?)한다. Assembly code란 컴퓨터가 직접 실행할 수 있는 machine language를, 사람이 읽을 수 있게 보여주는 한 형태이다. 마저 얘기하자면, 일부 compiler는 내부적으로 assembler를 포함하여, object file을 직접 만들기도 한다. 어쨌든, 여기서부터 흥미진진해지기 시작한다.
아주 옛날, 호랑이가 data center에서 담배 피던 시절, 많은 프로그램은 그 자체로도 완성된 모습을 지녔다. 그때만 해도 compiler라는 것은 보통 없었고, 사람들은 직접 assembly code를 작성했으며, assembler는 실제로 machine이 직접 실행할 수 있는 executable file을 생성했다. Fortran이나 Cobol 같은 언어가 생겨나기 시작하자, 사람들은 subroutine으로 이루어진 library를 기반으로 생각하기 시작했고, 이는 assembler를 서로 다른 시기에 여러 번 실행하여 결과물을 하나의 executable file로 합칠 수 있어야 했다는 것을 뜻한다. 이에 따라 assembler는 전과 다른 종류의 output을 생성할 수 있어야 했고, 이 결과물을 object file이라고 부르게 되었다. (왜 그 이름이 붙었는지는 전혀 모르겠다.) 그리하여 서로 다른 object file을 결합하는 새 프로그램이 필요해졌다. 이 프로그램은 후에 linker로 알려지게 되었다. (왜 이 이름이 붙었는지는 자명하리라.)
자세한 설명은 다음 분이 해주시겠지만...
http://www.airs.com/blog/archives/38
댓글 달기