main (source.o)이없는 객체 파일이 있고 main 함수 (libmain)가있는 공유 객체가 있다고 가정합니다. 그래서).공유 객체 (.so) 내부의 main() 함수가 링커에서 처리되는 방식
둘 모두가 동적으로 링크되어 source.bin 바이너리를 만들 때 링커가 엔트리 포인트를 처리하는 방법은 무엇입니까?
main (source.o)이없는 객체 파일이 있고 main 함수 (libmain)가있는 공유 객체가 있다고 가정합니다. 그래서).공유 객체 (.so) 내부의 main() 함수가 링커에서 처리되는 방식
둘 모두가 동적으로 링크되어 source.bin 바이너리를 만들 때 링커가 엔트리 포인트를 처리하는 방법은 무엇입니까?
동적 연결된 프로그램이있을 때마다 여러 개의 "진입 점"이 있습니다. 첫 번째는 동적 링커 자체의 진입 점에 있습니다. /lib/ld-linux.so.2
(Linux/x86의 경우) 또는 이와 유사합니다. 동적 링커가 먼저 실행되어 모든 심볼 이름을 (정의가 주 프로그램 또는 라이브러리에 있는지 여부에 관계없이) 해당 정의로 해석 한 다음 실행을 주 프로그램 바이너리의 두 번째 진입 점으로 전달합니다. 이것은 main
이 아니며 C++와 같은 것들 (예 : 환경 변수에 대한 포인터 설정 및 main
에 대한 올바른 인수 구성)을 처리하는 "C 런타임"(따라서 crt.o
및 유사한 이름)의 일부입니다. . 이 코드는 exit(main(argc, argv));
으로 끝나며 (동적 링커에 의해) 재배치 된 주소 인 exit
과 main
을 모두 사용합니다.
main()
은 다른 기능과 비슷하지만 호스트 된 환경에서 c/C++ 프로그램의 논리적 진입 점으로 처리됩니다. 따라서 main()
을 연결하는 것과 관련하여 특별한 것은 없습니다.
내가 가지고 있다고 생각합니다. – silverframemonitor
나는 이것을 이해하지만, 공유 객체가 "main"함수를 가지고 있고, 또 다른 객체 파일이 "main"함수를 가지고 있다면, 어떻게 링크 하는가? – liuyang1