7.1-Compiler_Drivers
preprocessor, compiler, assembler, linker 를 불러 사용한다.
code/link/main.c
1int sum(int *a, int n);2int array[2] = {1, 2};34int main() {5int val = sum(array, 2);6return val;7}
code/link/sum.c
1int sum(int *a, int n) {2int i, s = 0;3for(i = 0; i < n; i++) {4s += a[i];5}6return s;7}
2개의 파일을 이용해 하나의 실행파일 prog
를 만드는 과정을 살펴보자.
이를 위해 명령어 gcc -Og -o prog main.c sum.c
를 실행시키게 된다.
driver는 첫번째로,
이는 C 소스코드를 중간파일(ASCII intermediate file) 인,
그 다음으로,
이는 중간파일을 어셈블리 파일(ASCII assembly-language) 인,
이는 어셈블리 파일을 재할당 가능한 이진 목적파일(
sum.c 에 대해 동일한 과정을 거쳐, 목적파일을 만든다.
마지막으로,
main.o, sum.o 그리고 다른 필요한 시스템목적파일과 함께, 실행가능한 이진파일(
마지막으로 실행을 위해, ./prog
를 입력하는데, 이는
터미널이 OS의 loader 라는 함수를 사용하는 것으로 이루어진다.
loader 는 코드와 데이터를 메모리에 복사하고, 통제권을 프로그램의 시작부분으로 넘겨준다.