GCC: Wie kann man herausfinden, warum eine Objektdatei nicht verworfen wird?

8

Ich habe eine ausführbare Datei, die auf ein großes .a-Archiv verweist, das viele Funktionen enthält. Die ausführbare Datei verwendet nur einen kleinen Bruchteil der Funktionen in diesem Archiv, aber aus irgendeinem Grund zieht sie alles daraus und ist sehr groß Mein Verdacht ist, dass ein Teil der Funktionalität, die die ausführbare Datei verwendet, irgendwie auf etwas verweist, was sie nicht tun sollte, und das bewirkt, dass alles andere gezogen wird Ist es möglich, dass gcc mir sagt, welche Referenz ein bestimmtes Symbol in der ausführbaren Datei hinzufügt? Warum sonst kann das passieren?

Ich habe versucht, --gc-sections ohne Effekt zu verwenden.
Ich habe versucht, --version-script zu verwenden, um alle Symbole in der ausführbaren Datei lokal ohne Auswirkung zu machen Ich bin nicht interessiert in -ffunction-sections und -fdata-sections , da es während Objektdateien ist, die ich verwerfen möchte, keine Funktionen.
Andere Antworten erwähnen -why_live , aber das scheint nur für Darwin implementiert zu sein und ich bin in Linux x86_64

    
shoosh 18.01.2015, 14:00
quelle

1 Antwort

4

Verwenden Sie -Wl,-M , um -M an den Linker zu übergeben, wodurch eine Linktrace gedruckt wird. Dies zeigt Ihnen die Gründe (oder zumindest den zuerst gefundenen Grund) für jede Objektdatei, die aus einem Archiv verlinkt wird.

    
R.. 18.01.2015, 16:01
quelle

Tags und Links