Frage

Ich bin ziemlich neu in der C ++ Fluss zu bauen, und ich denke an Schaltteilvernetzung für meine Bibliotheken zu verwenden, anstatt ar Archive zu schaffen. Ich hoffe Link Zeit in einer unvermeidlichen letzten Kompilierschritt zu reduzieren, die ich habe, und ich meint, Teil einmal einige Bibliotheken verbinden mir Zeit sparen könnte alles in diesem letzten Schritt über die Verknüpfung.

Ist das, was ich beschreibe möglich? Ich meine, es sollte etwas entlang der Linien ld -Ur -o mylib.o [components] sein. Gibt es wichtige Build Überlegungen, die ich nicht berücksichtigt?

War es hilfreich?

Lösung

Sie verlieren einen wichtigen Effekt die Objektdateien in einem ar Archiv zu haben, die das nur die referenzierten Objekte in verknüpft werden.

Wenn Sie sowohl foo.o mit dem Symbol foo und bar.o mit dem Symbol bar in einem ar Archiv haben, und nur das foo Symbol verweisen, nur foo.o würde verknüpft werden. Wenn Sie stattdessen einen Teil Link tun, deren Inhalt beide werden in der ausführbaren Datei am Ende, auch wenn bar nie irgendwo verwiesen wird.

Sie können auch versuchen, eine schnellere Linker, wie Gold .

Andere Tipps

Die andere Zeit, die Sie ld -r zu tun, um einen Teil-Link verwenden möchten, wenn Sie einige Objektdateien, die statische Initialisierung enthält, die bestimmten Funktionen bereitzustellen sind erforderlich, aber das wird nie direkt von einem Code aufgerufen.

Wenn Sie ich möchte ein Dokument aufzuschreiben, die zeigt, wie das funktioniert und warum es funktioniert!

(siehe Laufzeit C ++ Klasse Registrierung zum Beispiel, verwendet es eine statische Registerfunktion, die in einem Register registriert sich, die dann verwendet werden kann, zu schaffen und eine Basis * mit polymorphen Verhalten zurückkehren, da es ein neues Objekt erstellt, die vererbt wurde Siehe von Base. C ++ Runtime-Kenntnisse der Klassen die ist eine Antwort auf eine Frage, die ich gefragt.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top