티스토리 뷰

2018/3/30


링커가 하는일은 크게 2개가 있다.

1.Relocation

링커가 컴파일러가 생성한 오브젝트 파일들을 모아서 하나의 수행파일을 만들때, 각 오브젝트 파일에 있는 데이터의 주소나 코드의 메모리 참조주소가 링커에 의해 합쳐진 수행파일에서의 주소가 다르기 때문에, 그것을 알맞게 수정 해줘야함.


2.Symbol Resolution (심볼 해결?)

심볼이라는것은 함수의 이름, 변수의 이름 등등을 의미함. 심볼을 해결한다는 뜻은 여러개의 오브젝트 파일에 같은 이름의 함수 또는 같음 이름의 변수 명이 정의 되어 있을때 어떤 파일의 어떤 함수의 것을 사용해야 하는가를 결정하는 일을 의미한다.


쉽게 말해서 A.o 파일과 B.o 파일안에 f()라는 함수가 동시에 정의 되어 있다고 해보자. 이때, 링커가 두개의 오브젝트 파일을 합쳐서 하나의 수행파일로 만들때 두개의 f()중에 어떤 f()를 사용해야 할지 결정해야 한다.



------------------------------------------------------------------------------------------


넓은 의미의 컴파일은 3가지 과정으로 나뉘어 진다.

1. 전처리기(cpp = c pre processor) 

2. 좁은 의미의 컴파일러(cc1)

3. 어셈블러(high level 언어를 low level언어로)


다시 말해서 c언어로 작성된 코드를 컴파일 하게 되면 전처리기가 #include 또는 #define과 같은 구문을 처리해서 그 부분을 코드로 대체 시킨다. 그다음, 진짜로 c언어를 어셈블리어로 컴파일한다. 어셈블러가 한번더 어셈블리어를 0과1로 이루어진 기계어로 번역하게 된다. 최종적으로 어셈블러에 의해 오브젝트 파일이 만들어 진다고 생각하면 됨.


이렇게 3가지 과정을 거치면 컴파일이 완료 된것이다.

좁은 의미의 컴파일 = 하이레벨언어를 로우레벨언어로 번역하는 과정.

넓은 의미의 컴파일 = 하이레벨언어를 기계어로 번역하는 과정.


------------------------------------------------------------------------------------------


컴파일러가 컴파일을 하게 되면 object파일(.o)를 생성하게 되는데 이 오브젝트 파일 안에 심볼테이블이라는것이 존재한다.

심볼 테이블 안에는 그 오브젝트 파일에 정의되어 있던 심볼들의 이름, 타입, 심볼의 위치 등이 구조체 배열의 형태로 저장되어 있다.


심볼 테이블 이라는것은 구조체 배열이라고 생각하자.

각각의 구조체 하나하나에 심볼 하나에 대한 이름, 타입, 위치 등의 정보가 들어가 있는것이고


이 심볼 테이블은 오브젝트 파일안에 들어 있다.


링커가 오브젝트 파일들을 한곳으로 모아서 수행파일을 만드는데, 



심볼을 정의하거나, 참조할수 있다. 맨 위의 swap()은 심볼을 정의한것이며, swap();은 심볼을 참조한것이고, 마지막은 심볼을 정의하면서 동시에 x라는 심볼을 참조하고 있다.


심볼 정의라는것은 오브젝트 파일속에 있는 심볼 테이블(구조체 배열)의 한 엔트리(하나의 구조체) 이다.


링커가 수행하는 Symbol Resolution이라는것은, 각 오브젝트 파일에 있는 심볼 참조를 어떤 심볼 정의에 연관시킬것인지를 결정하는 과정이다.


위에서 말했듯이, A.o와 B.o 두개의 오브젝트 파일이 있을때, A의 심볼테이블에 f()라는 함수의 정의가 있고 B의 심볼테이블에도 f()라는 함수의 정의가 있다고 해보자.


이때 링커가 A.o와 B.o를 합쳐서 하나의 수행파일을 만들텐데 이때 f()라는 심볼 참조를 어떤 심볼 정의(A.o의 f()? B.o의 f()?)에 매칭 시킬것인지를 결정해야 한다.



------------------------------------------------------------------------------------------


'컴퓨터 공학과 졸업 > 시스템프로그래밍' 카테고리의 다른 글

Thread-safe, Reentrant 함수  (0) 2018.05.31
링커정리2  (0) 2018.04.01
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함