2010-05-12 17 views
8

Quando esamino il codice generato da gcc -v -o proggy.exe proggy.o trovo che la riga di comando si espanda in un grande mucchio di librerie e librerie, tutte collegate tramite collect2.exe. Cos'è successo a ld.exe? Perché non lo vedo? Qualcuno può spiegarmi cosa fa collect2.exe?Che cosa fa collect2.exe?

risposta

8

collect2 è un'utilità utilizzata per generare una tabella di costruttori che __main (una funzione generata automaticamente chiamata all'inizio di main) dipende da. Normalmente non si vede perché è chiamato ld sul file system, ed è a sua volta chiama il vero ld (tipicamente chiamato real-ld, anche se collect2 controllerà un numero di posti in cerca di esso)

+0

Mr. Mrozek, Grazie per la risposta. Domanda successiva: se utilizzo LD.EXE sulla riga di comando, cosa succede al codice? Supponiamo di avere ld.exe -L/some_lib proggy.o -lsome_lib_lib. Come si amplia questo? La tua precedente risposta alla mia domanda iniziale è stata molto illuminante! Grazie, Mark – allynm

+1

Vale la pena notare che i moderni sistemi ELF non avranno bisogno di quella raccolta (che ovviamente è un brutto hackeraggio). Usano le sezioni dei medici e dei datori di ELF per il controllo e i distruttori. –

4

GCC utilizza un'utility chiamata collect2 su quasi tutti i sistemi per organizzare chiamate alle varie funzioni di inizializzazione all'avvio. [link]