Ich lerne gerade etwas über Mach-O-Datei. Es kommt eine Frage, wenn ich Lazy-Symbol & non-faul Symbol lernen: Wer bestimmt ein Symbol zu faul oder nicht faul? und warum?Was macht ein Symbol faul oder nicht faul?
Ich denke, es könnte der Compiler sein, dass ...
UPDATE: ich eine Antwort über meine Frage gefunden, vielleicht ist es die Wahrheit:
Faul durch die Option -z gesteuert Bindung zum Linker, ld
. Diese Option verwendet Schlüsselwörter als Argument. die Schlüsselwörter enthalten (unter anderem):
lazy
Wenn eine ausführbare Datei oder gemeinsam genutzte Bibliothek zu erzeugen, markieren Sie den dynamischen Linker sagen Funktionsaufruf Auflösung bis zu dem Punkt zu verschieben, wenn die Funktion (Lazy Binding) genannt wird, anstatt zur Ladezeit.
now
Wenn eine ausführbare Datei oder gemeinsam genutzte Bibliothek zu erzeugen, markieren sie den dynamischen Linker zu sagen, alle Symbole zu lösen, wenn das Programm gestartet wird, oder wenn die gemeinsam genutzte Bibliothek ist mit dlopen()
verwenden, statt Aufschieben Funktion Call Resolution zu der Punkt, an dem die Funktion zuerst aufgerufen wird.
Lazy Bindung ist die Standardeinstellung. Wenn Sie qcc
verwenden (wie wir empfehlen), verwenden Sie die Option -W, um die Option -z an ld zu übergeben. Geben Sie beispielsweise -Wl
, -zlazy
oder -Wl
, -znow
an.
Referenz: Optimizing the runtime linker
Verwandte Frage: Does Clang/GCC really support a delay loading feature?