링킹

본격적으로 링킹과정에 대해 깊이 있게 다뤄보는 시간이다!  링커는 입력 재배치 가능 목적파일들의 심볼 테이블로부터 정확히 한 개의 심볼 정의에 각 참조를 연결시켜서 심볼 참조를 해석한다. 심볼의 해석은 동일한 모듈 내에 정의된 지역 심볼들로 참조를 한 경우에 대해서는 간단하다. 하지만, 컴파일러는 모듈 당 하나의 지역 심볼 정의만을 허용하기에 전역심볼은 심볼 해석이 까다로울 수 있다.  STEP 1. Symbol Resolution 심볼 해석: 심볼 참조를 정확하게 하나의 심볼 정의에 연결되어 있는지 확인한다.   one symbol definition  링커는 입력 재배치 가능 목적파일들의 심볼 테이블로부터 정확히 한 개의 심볼 정의에 각 참조를 연결시켜서 심볼 참조를 해석한다. 심볼의 해석은 동일한 ..
Linkinglinking : 수많은 코드/데이터를 ( 메모리로 로드되고 ,실행될 수 있는 ) 단일의 파일로 결합하는 것 linking time  = compile time(static) + load time/run time(dynamic) Static Linking (런타임 이전)- 컴파일 시간에 수행된다. - 재배치 가능한(컴파일된) object files을 수집하고, 하나의 연결된 실행가능 object 파일을 만든다.  정적링커들은 재배치 가능한 목적파일들과 인스트럭션들을 입력으로 받아들여 로드될 수 있고, 실행될 수 있는 완전히 링크된 실행 가능 목적파일을 출력으로 생성한다.  - 재배치 가능 목적파일 = 다양한 코드/데이터 섹션들 (각 섹션은 연속적인 바이트들이다)- 인스트럭션들은 한 개의 섹션..
Seperate Compile  분할 컴파일이란?: 하나의 큰 프로젝트를 여러 multiple files로 나누는 것을 의미한다. ( 더 다루기 쉬운 모듈로 쪼갬) 모듈 : 관련된 일들을 수행하는 함수와 데이터의 집합 (리눅스에서는 file 단위_각각의 object 파일을 모듈이라고 보자) 더보기컴파일러 드라이버 동작과정 요약  본격적으로 링커에 대해 알아보기 전, 컴파일러 드라이브의 컴파일 과정을 복기시켜보자 ! //정적 연결 예제 gcc -Og -o prog main.c sum.c 링커는 재배치 가능 목적파일들을(.o) 연결해 실행가능 목적파일 prog를 형성한다. 드라이버는 먼저 C 전처리기를 돌리고, 이것은 C 소스파일 main.c 를 ASCII 중간 파일인 main.i로 번역한다. 다음으로 C ..
더보기정보 = 비트 + 컨텍스트로 구성된다. .c 프로그램은 연속된 바이트들로 파일에 저장된다.모든 시스템 내부의 정보들은 비트들로 표현이되고, 다른 객체들을 구분하는 유일한 방법은 이들을 바라보는 컨텍스트에 의해서이다. 소스파일 (text file) - 오로지 아스키 문자들로만 이루어진 파일 ↔ 바이너리 파일 - C 프로그래밍 언어의 기원에 대해 잠시 알아보자면, C는 유닉스 운영체제를 만들기 위해 설계되었다.   컴파일 시스템 linux> gcc -o hello hello.c: gcc 컴파일러 드라이버는 소스파일을 읽어서 실행파일로 번역한다. 번역은(전처리, 컴파일, 어셈블리, 링크) 4단계로 구성되고 , 이 네 단계를 실행하는 프로그램들을 합쳐 컴파일 시스템이라고 부른다.   1. 전처리 단계 : ..
rlo-lo
'링킹' 태그의 글 목록