2012-03-21 2 views

답변

6

동적 연결된 프로그램이있을 때마다 여러 개의 "진입 점"이 있습니다. 첫 번째는 동적 링커 자체의 진입 점에 있습니다. /lib/ld-linux.so.2 (Linux/x86의 경우) 또는 이와 유사합니다. 동적 링커가 먼저 실행되어 모든 심볼 이름을 (정의가 주 프로그램 또는 라이브러리에 있는지 여부에 관계없이) 해당 정의로 해석 한 다음 실행을 주 프로그램 바이너리의 두 번째 진입 점으로 전달합니다. 이것은 main이 아니며 C++와 같은 것들 (예 : 환경 변수에 대한 포인터 설정 및 main에 대한 올바른 인수 구성)을 처리하는 "C 런타임"(따라서 crt.o 및 유사한 이름)의 일부입니다. . 이 코드는 exit(main(argc, argv));으로 끝나며 (동적 링커에 의해) 재배치 된 주소 인 exitmain을 모두 사용합니다.

+0

내가 가지고 있다고 생각합니다. – silverframemonitor

+0

나는 이것을 이해하지만, 공유 객체가 "main"함수를 가지고 있고, 또 다른 객체 파일이 "main"함수를 가지고 있다면, 어떻게 링크 하는가? – liuyang1

3

main()은 다른 기능과 비슷하지만 호스트 된 환경에서 c/C++ 프로그램의 논리적 진입 점으로 처리됩니다. 따라서 main()을 연결하는 것과 관련하여 특별한 것은 없습니다.

관련 문제