
323
6
장
표준 러스트를 넘어서
네임 맹글링
컴파일 방식 언어는 대부분 프로그램의 여러 부분을 별도의 덩어리 (객체 파일) 단위의 기계어
로 변환하고 나서, 각 부분을 링커로 결합해서 완전한 프로그램으로 만드는
분리 컴파일
separate
compilation
방식을 따른다. 따라서 프로그램 소스 코드에서 일부분만 변경됐을 때는 해당 객체 파
일만 다시 생성하고, 링크 단계에서는 변경된 객체와 나머지 객체를 결합하는 방식으로 프로그
램을 다시 빌드한다.
링크 단계는 간단히 말해 점 잇기
join
-
the
-
dots
작업과 같다.
10
객체 파일 중에서 어떤 것은 함수와
변수를 정의하고, 또 어떤 것은 컴파일 타임에는 제공되지 않는 다른 객체의 정의를 사용한다
는 플레이스홀더 마커를 갖는다. 링커는 이 두 가지 파일을 연결한다. 즉, 컴파일된 코드에 있
는 플레이스홀더가 모두 구체적인 정의에 대한 레퍼런스로 채워진다.
링커는 이렇게 플레이스홀더와 정의를 연결하는 작업을 단순히 이름이 일치하는지 검사하는
방식으로 처리한다. 따라서 이런 연결 관계에 대한 글로벌 네임스페이스를 갖게 된다.
예전에는 이것만으로도
C
언어 프로그램을 링크하는 데 충분했다. 이름 하나를 재사용할 방법
이 없었기 때문이다. 그래서 함수 이름이 객체 파일에 그대로 표시된다. 따라서
ib1
_
process ...