2010-05-12 13 views
8

Kiedy sprawdzam kod generowany przez gcc -v -o proggy.exe proggy.o, stwierdzam, że linia poleceń rozszerza się do dużej grupy opcji biblioteki i bibliotek, z których wszystkie są połączone za pomocą metody collect2.exe. Co się stało z plikiem ld.exe? Dlaczego tego nie widzę? Czy ktoś może mi wyjaśnić, co robi plik collect2.exe?Co robi plik collect2.exe?

Odpowiedz

8

collect2 to narzędzie wykorzystywane do generowania tabeli konstruktorów że __main (funkcja auto-generowany nazywany na początku main) zależy. Zwykle nie widzisz tego, ponieważ jest on nazwany ld w systemie plików, a to z kolei wywołuje prawdziwy ld (zwykle zwany real-ld, chociaż collect2 sprawdzi liczbę miejsc, które go szukają)

+0

Pan Mrożek, Dziękuję za odpowiedź. Następne pytanie: Jeśli używam LD.EXE w linii poleceń, co dzieje się z kodem? Załóżmy, że mam plik ld.exe -L/some_lib proggy.o -lsome_lib_lib. Jak to się rozwija? Twoja poprzednia odpowiedź na moje pierwsze pytanie była bardzo pouczająca! Dzięki, Mark – allynm

+1

Warto zauważyć, że nowoczesne systemy ELF nie będą potrzebować tej kolekcji (co oczywiście jest paskudnym hackerem). Korzystają z sekcji lekarzy i lekarzy ELF do konwekcji i destruktorów. –

4

GCC używa narzędzia o nazwie collect2 na prawie wszystkich systemach, aby wywołać różne funkcje inicjalizacyjne w czasie początkowym. [link]