Służy do rozwiązywania zależności cyklicznych między kilkoma bibliotekami (na liście od -(
do -)
).
Cytowanie Dlaczego kolejność łączenia bibliotek czasami powoduje błędy w GCC? lub man ld
http://linux.die.net/man/1/ld
-(
archiwa -)
lub --start-group
archiwa --end-group
Te archiwa powinny być lista plików archiwalnych. Mogą to być jawne nazwy plików lub opcje -l.
Określone archiwa są wielokrotnie przeszukiwane, dopóki nie zostaną utworzone żadne nowe niezdefiniowane odniesienia. Zwykle archiwum jest przeszukiwane tylko raz w kolejności określonej w wierszu poleceń. Jeśli symbol w tym archiwum jest potrzebny do rozwiązania niezdefiniowanego symbolu, do którego odwołuje się obiekt w archiwum, który pojawia się później w wierszu poleceń, konsolidator nie byłby w stanie rozwiązać tego odniesienia. Grupując archiwa, wszystkie są wielokrotnie przeszukiwane, aż wszystkie możliwe odniesienia zostaną rozwiązane.
Korzystanie z tej opcji wiąże się ze znacznymi kosztami wydajności. Najlepiej jest używać go tylko wtedy, gdy istnieją nieuniknione cykliczne odniesienia między dwoma lub więcej archiwami.
Tak więc biblioteki wewnątrz grupy można kilkakrotnie przeszukiwać pod kątem nowych symboli i nie potrzebujesz żadnych brzydkich konstrukcji, takich jak -llib1 -llib2 -llib1
Archiwum PS to w zasadzie statyczna biblioteka ( *.a
pliki)
-Wl,--verbose
opcję do gcc (zostanie ona przekazana--verbose
do linkera ld). Na przykład dla-ltest
biblioteki: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 próbuje.so
najpierw otworzyć , ale potem próbuje otworzyć.a
. Odbywa się to w każdym katalogu w katalogach wyszukiwania bibliotek.