2012-10-25 9 views
8

Ho qualche problema di collegamento.Opzione di collegamento gcc per capire perché alcuni file oggetto sono collegati in binario

Per indagare sul problema, aggiungere -t flag di collegamento (gcc -Wl, -t) per stampare quali librerie sono utilizzate e quali oggetti vengono utilizzati dalle librerie statiche.

C'è una libreria statica che in alcune configurazioni viene utilizzata una serie di file oggetto e in altri altri set.

C'è un modo (probabilmente ld flag) per capire perché l'oggetto specifico (quale simbolo precedentemente non definito è definito nel file oggetto) è collegato in binario e altro dalla stessa libreria statica no?

risposta

4

La bandiera che cercavo è -M, che stampa una mappa di collegamento allo standard output.

Da ld (1):

-M 
    --print-map 
     Print a link map to the standard output. A link map provides information about the link, including the following: 
      · Where object files are mapped into memory. 
      · How common symbols are allocated. 
      · All archive members included in the link, with a mention of the symbol which caused the archive member to be brought in. 
      · The values assigned to symbols. 

Secondo elemento della lista è quello che stavo cercando.

1

Poiché hai aggiunto una taglia più di un mese dopo l'ultima modifica alla domanda e alla risposta, presumo che non ti piaccia la tua risposta.

A quanto mi risulta, si sta cercando di scoprire quale oggetto (A) sta causando qualche altro oggetto (B) per essere collegato a.

Se fate la compilazione/collegamento senza B presenti (cioè non sulla riga di comando), quindi dovresti ricevere messaggi di errore che ti spiegano perché è necessario, che farà riferimento a A.

Se B è in una libreria, potrebbe essere necessario creare una versione speciale di quella libreria che non include B.

+0

In realtà mi piace la mia risposta. Ho legato per sbaglio e non posso rilanciarlo :) – dimba