Betrachten Sie dieses Szenario (alles im Release-Modus) zu entfernen:VC++ Linker indirekte Abhängigkeiten für statische Bibliotheken
a.lib includes f1() and f2().
a.lib is built using /LTCG on VS2015.
f1() is local without any external function calls.
f2() calls fc() from b.lib
b.lib includes fc() and 100s of other functions.
b.lib is built by a 3rd party, probably not VS.
main.exe is built only with main.cpp, using /LTCG on VS2015.
main.exe links to a.lib and b.lib
main.cpp only calls f1()
Nun, wenn ich main.exe bauen, ich erwarte, dass es nur f1() 's Umsetzung einzubeziehen . Die Größe der ausführbaren Datei beträgt ~ 10 MB.
Wenn ich jedoch f2() die Implementierung in a.lib auskommentieren und a.lib neu aufbauen, dann wird main.exe 200KB. Es funktioniert in beiden Fällen genau gleich.
Meine Sorge ist sowohl die Größe der ausführbaren Datei und entlarvt alles über b.lib (die nicht meine eigene Bibliothek ist) unnötig.
Frage: Warum ist der Linker nicht schlau genug, um f2() -> fc() Definitionen nicht zu enthalten? während es schlau genug ist, den Rest von b.lib nicht einzuschließen (was mehr als 100 MB ist)?
Können Sie mit dem Erstellen von a.lib mit der C/C++/Gy-Option experimentieren und Ihre ausführbare Datei mithilfe der Linker/OPT-Option verknüpfen? –
/Gy ist bereits für a.lib definiert, für ausführbare Datei/OPT: ICF und/OPT: REF sind bereits aktiviert. Hast du ein anderes/OPT im Kopf? – Alparslan