Es dient zum Auflösen zirkulärer Abhängigkeiten zwischen mehreren Bibliotheken (zwischen -(
und aufgelistet -)
).
Zitieren Warum verursacht die Reihenfolge, in der Bibliotheken verknüpft sind, manchmal Fehler in GCC? oder man ld
http://linux.die.net/man/1/ld
-(
Archive -)
oder --start-group
Archive --end-group
Die Archive sollten eine Liste von Archivdateien sein. Dies können entweder explizite Dateinamen oder -l-Optionen sein.
Die angegebenen Archive werden wiederholt durchsucht, bis keine neuen undefinierten Referenzen mehr erstellt werden. Normalerweise wird ein Archiv nur einmal in der Reihenfolge durchsucht, in der es in der Befehlszeile angegeben ist. Wenn ein Symbol in diesem Archiv benötigt wird, um ein undefiniertes Symbol aufzulösen, auf das von einem Objekt in einem Archiv verwiesen wird, das später in der Befehlszeile angezeigt wird, kann der Linker diese Referenz nicht auflösen. Durch Gruppieren der Archive werden alle wiederholt durchsucht, bis alle möglichen Referenzen aufgelöst sind.
Die Verwendung dieser Option verursacht erhebliche Leistungskosten. Es ist am besten, es nur zu verwenden, wenn zwischen zwei oder mehr Archiven unvermeidbare Zirkelverweise bestehen.
So können Bibliotheken innerhalb der Gruppe mehrmals nach neuen Symbolen durchsucht werden, und Sie benötigen keine hässlichen Konstrukte wie -llib1 -llib2 -llib1
PS-Archiv bedeutet im Grunde eine statische Bibliothek ( *.a
Dateien)
-Wl,--verbose
gcc eine Option hinzufügen (diese wird--verbose
an linker ld übergeben). ZB für-ltest
Bibliothek :attempt to open /lib/libtest.so failed \n attempt to open /lib/libtest.a failed \n attempt to open /usr/lib/libtest.so failed \n attempt to open /usr/lib/libtest.a failed \n
. Linker versuchen zuerst zu öffnen.so
, aber dann versuchen sie zu öffnen.a
. Dies erfolgt in jedem Verzeichnis in Bibliotheks-Suchverzeichnissen.