(C언어) 프로그램 실행 시 main을 어떻게 찾아갈까?

2024. 1. 2. 11:19코딩세상/C-언어

프로그램을 짜다 보면, 항상 시작을 main 함수부터 구현을 한다.

근데 이 main이라는 함수는 어떻게 배치가 되기에 컴퓨터가 알아서 찾아갈까??

 

이런 의문을 가지신 분들이 있을거에요.

 

아주 오래전에는 link시 main 함수가 있는 파일을 제일 먼저 언급하고, 해당 파일에서 main 함수가 맨 앞에 나오도록 작업을 했다고 하면 믿을까요???

 

link에 따라 실행이 되지 않는 현상이 발생을 했다고 하면 지금 세상에서는 믿지 않겠지만.. 사실 그랬습니다.

 

다음과 같이 코딩을 하고 컴파일을 해 보자.

int Main(int argc, char **argv)
{
}

 

아래와 같이 나랑 관계없어 보이는 Scrt1.o라는 object에 _start라는 함수에서 에러가 났다고 나온다.

cc     main.c   -o main
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x1b): undefined reference to `main'
collect2: error: ld returned 1 exit status

 

시스템마다 object의 이름은 다르지만, ld link는 처음 시작 지점에 특정 object를 배치하고, 해당 object의 시작점에서 main 함수를 부를 수 있도록 해 두어서, main의 함수가 어디에 있든 상관없이 해당 함수 주소를 맨 앞에 있는 object의 시작점에서 부를 수 있도록 해 두었다.

 

해당 object덕분에 위치에 상관없이 항상 우리가 원하는 프로그램은 main에서부터 구현을 하면 되는 것이다.

파일 이름과 위치에 상관없이 작업을 해 줄 수 있도록 link에서 처리를 해 둔 것이다.