IMIĘ ld - Używanie LD, łącznik GNU STRESZCZENIE ld opcje objfile … OPIS ld Łączy szereg plików obiektów i archiwów, przenosi ich dane i powiązuje odniesienia do symboli. Zwykle ostatnim krokiem w kompilacji programu jest uruchomienield. ld akceptuje pliki Language Command Language napisane w supeście składni języka Command Editor języka Command & Services AT & T, aby zapewnić wyraźną i całkowitą kontrolę nad procesem łączenia. Ta strona podręcznika nie opisuje języka poleceń; zobaczld wejście w "info" lub podręcznik ld: łącznik GNU, w celu uzyskania pełnych informacji na temat języka poleceń i innych aspektów łącznika GNU. Ta wersjald używa bibliotek BFD ogólnego przeznaczenia do operowania na plikach obiektowych. To pozwalald czytać, łączyć i pisać pliki obiektów w wielu różnych formatach --- na przykład COFF lub "a.out". Różne formaty mogą być ze sobą połączone w celu utworzenia dowolnego dostępnego pliku obiektów. Oprócz swojej elastyczności, linker GNU jest bardziej pomocny niż inne łączniki w dostarczaniu informacji diagnostycznych. Wiele łączników rezygnuje z wykonywania natychmiast po napotkaniu błędu; kiedykolwiek możliwe,ld kontynuuje wykonywanie, umożliwiając identyfikację innych błędów (lub, w niektórych przypadkach, uzyskanie pliku wyjściowego pomimo błędu). Łącznik GNUld ma na celu objęcie szerokiej gamy sytuacji i zapewnienie jak największej zgodności z innymi linkerami. W rezultacie masz wiele możliwości kontrolowania jego zachowania. OPCJE Łącznik obsługuje mnóstwo opcji wiersza poleceń, ale w praktyce kilka z nich jest używanych w dowolnym kontekście. Na przykład częste używanield polega na łączeniu standardowych plików obiektów uniksowych w standardowym, obsługiwanym systemie uniksowym. W takim systemie, aby połączyć plik "hello.o": Tak /lib/crt0.o hello.o -lcTo mówild do utworzenia pliku o nazwie wydajność w wyniku połączenia pliku "/lib/crt0.o" z "hello.o" i biblioteką "libc.a", która będzie pochodzić ze standardowych katalogów wyszukiwania. (Zobacz omówienie-l opcja poniżej.) Niektóre opcje wiersza polecenia dold można określić w dowolnym punkcie wiersza poleceń. Jednak opcje odnoszące się do plików, takich jak-l lub-T, aby plik był czytany w miejscu, w którym opcja pojawi się w linii poleceń, w stosunku do plików obiektów i innych opcji plików. Powtarzanie opcji niepodpisanych przy użyciu innego argumentu nie przyniesie dalszych efektów, lub zastąpienie wcześniejszych wystąpień (tych znajdujących się po lewej stronie wiersza poleceń) tej opcji. Opcje, które mogą być sensownie określone więcej niż raz, są opisane w poniższych opisach. Argumentami nie będącymi opcjami są pliki obiektowe lub archiwa, które mają być ze sobą połączone. Mogą one śledzić, poprzedzać lub mieszać się z opcjami wiersza polecenia, z tym wyjątkiem, że argument pliku obiektowego nie może być umieszczony między opcją a jej argumentem. Zwykle linker jest wywoływany za pomocą co najmniej jednego pliku obiektowego, ale można określić inne formy plików wejściowych binarnych za pomocą-l, -Roraz język poleceń skryptowych. Jeśli Nie binarne pliki wejściowe są określone, linker nie generuje żadnych danych wyjściowych i wysyła komunikatBrak plików wejściowych. Jeśli linker nie może rozpoznać formatu pliku obiektowego, zakłada, że jest to skrypt linkera. Skrypt określony w ten sposób rozszerza główny skrypt linkera używany dla łącza (domyślny skrypt linkera lub ten określony przy użyciu-T). Ta funkcja umożliwia linkerowi powiązanie z plikiem, który wydaje się być obiektem lub archiwum, ale w rzeczywistości jedynie definiuje niektóre wartości symboli lub używa "INPUT" lub "GROUP" do ładowania innych obiektów. Zauważ, że podanie skryptu w ten sposób jedynie powiększa główny skrypt linkera; Użyj-T możliwość całkowitego zastąpienia domyślnego skryptu linkera. W przypadku opcji, których nazwy są pojedynczymi literami, argumenty opcji muszą podążać za literą opcji bez interweniujących białych znaków lub być podawane jako osobne argumenty bezpośrednio po opcji, która ich wymaga. W przypadku opcji, których nazwy są wieloliterowe, jedna lub dwie kreski mogą poprzedzać nazwę opcji; na przykład,-trace-symbol i--trace-symbol są równoważne. Uwaga - istnieje jeden wyjątek od tej reguły. Opcje wielu liter rozpoczynające się od małej litery "o" mogą być poprzedzone tylko dwoma myślnikami. Ma to na celu zmniejszenie nieporozumień z-o opcja. Na przykład-omagic ustawia nazwę pliku wyjściowego namagia natomiast--omagic ustawia flagę NMAGIC na wyjściu. Argumenty do opcji wieloliterowych muszą być oddzielone od nazwy opcji znakiem równości lub podane jako osobne argumenty bezpośrednio po opcji, która ich wymaga. Na przykład,--trace-symbol foo i--trace-symbol = foo są równoważne. Dopuszczalne są unikalne skróty nazw opcji wielokrotnych liter. Uwaga - jeśli linker jest wywoływany pośrednio, przez sterownik kompilatora (npgcc) następnie wszystkie opcje linii poleceń linkera powinny być poprzedzone prefiksem-Wl, (lub cokolwiek jest odpowiednie dla danego sterownika kompilatora), takie jak to: gcc -Wl, - startgroup foo.o bar.o -Wl, - endgroupJest to ważne, ponieważ w przeciwnym razie program sterownika kompilatora może po cichu zrzucić opcje linkera, powodując powstanie złego łącza. Oto tabela ogólnych przełączników linii poleceń zaakceptowanych przez linker GNU: -za słowo kluczowe Ta opcja jest obsługiwana dla zgodności z HP / UX. The słowo kluczowe Argument musi być jednym z łańcuchówarchiwum, udostępniony, lubdomyślna. -archiwum jest funkcjonalnie równoważne-Bstatic, a pozostałe dwa słowa kluczowe są funkcjonalnie równoważne-Bdynamiczny. Ta opcja może być używana dowolną liczbę razy. -ZA architektura --architecture = architektura W bieżącym wydaniuldTa opcja jest przydatna tylko w rodzinie architektur Intel 960. W tymld konfiguracja, architektura argument identyfikuje konkretną architekturę w rodzinie 960, umożliwiając pewne zabezpieczenia i modyfikując ścieżkę przeszukiwania biblioteki archiwum. Przyszłe wydaniald może obsługiwać podobną funkcjonalność dla innych rodzin architektur. -b format wejściowy --format = format wejściowy ld może być skonfigurowany do obsługi więcej niż jednego rodzaju pliku obiektowego. Jeżeli twójld jest skonfigurowany w ten sposób, możesz użyć-b opcja określenia formatu binarnego dla plików obiektów wejściowych, które następują po tej opcji w wierszu poleceń. Nawet kiedyld jest skonfigurowany do obsługi alternatywnych formatów obiektów, zazwyczaj nie musisz tego określać, jakold powinien być skonfigurowany tak, aby oczekiwał jako domyślnego formatu wejściowego najbardziej typowego formatu na każdym komputerze. format wejściowy to ciąg tekstowy, nazwa konkretnego formatu obsługiwanego przez biblioteki BFD. (Możesz wyświetlić listę dostępnych formatów binarnych za pomocąobjdump -i.) Możesz użyć tej opcji, jeśli łączysz pliki z nietypowym formatem binarnym. Możesz także użyć-b do wyraźnego przełączania formatów (podczas łączenia plików obiektów w różnych formatach), poprzez uwzględnianie-b format wejściowy przed każdą grupą plików obiektowych w określonym formacie. Domyślny format jest pobierany ze zmiennej środowiskowej "GNUTARGET". Możesz także zdefiniować format wejściowy ze skryptu, używając polecenia "TARGET"; -do Plik polecenia MRI --mri-script = Plik polecenia MRI W celu zapewnienia kompatybilności z łącznikami produkowanymi przez MRI,ld akceptuje pliki skryptów napisane w alternatywnym, ograniczonym języku poleceń, opisane w sekcji Dokumentacja zgodna z MRI w dokumentacji GNU ld. Przedstaw pliki skryptu MRI za pomocą opcji-do; Użyj-T opcja uruchamiania skryptów linkerów napisanych w ogólnym celuld język skryptowy. Jeśli MRI-cmdfile nie istnieje,ldszuka go w katalogach określonych przez dowolne-L opcje. -re -dc -dp Te trzy opcje są równoważne; wiele form jest obsługiwanych dla kompatybilności z innymi linkerami. Przydzielają one spacje do wspólnych symboli, nawet jeśli określony jest relatywny plik wyjściowy (z-r). Komenda skryptu "FORCE_COMMON_ALLOCATION" ma taki sam efekt. -mi wejście --entry = wejście Posługiwać się wejście jako wyraźny symbol rozpoczęcia wykonywania programu, a nie domyślny punkt wejścia. Jeśli nie ma żadnego symbolu o nazwie wejście linker spróbuje przeanalizować wejście jako numer i użyj go jako adresu wejściowego (numer zostanie zinterpretowany w bazie 10, możesz użyć znaku wiodącego0x dla podstawy 16 lub prowadzącej0 dla podstawy 8). -MI --export-dynamic Podczas tworzenia dynamicznie połączonego pliku wykonywalnego dodaj wszystkie symbole do tabeli symboli dynamicznych. Tablica symboli dynamicznych to zestaw symboli, które są widoczne z obiektów dynamicznych w czasie wykonywania. Jeśli nie użyjesz tej opcji, tablica symboli dynamicznych będzie zwykle zawierała tylko te symbole, do których odwołuje się jakiś obiekt dynamiczny wymieniony w łączu. Jeśli użyjesz "dlopen" do załadowania dynamicznego obiektu, który musi odwoływać się do symboli zdefiniowanych przez program, a nie do jakiegoś innego dynamicznego obiektu, prawdopodobnie będziesz musiał użyć tej opcji podczas łączenia samego programu. Możesz również użyć skryptu wersji, aby kontrolować, jakie symbole powinny zostać dodane do tabeli symboli dynamicznych, jeśli format wyjściowy obsługuje ten format. Zobacz opis--version-script in @ ref {VERSION}. -EB Połącz obiekty big-endian. Wpływa to na domyślny format wyjściowy. -EL Połącz obiekty little-endian. Wpływa to na domyślny format wyjściowy. -fa --pomocniczy imię Podczas tworzenia obiektu wspólnego ELF ustaw wewnętrzne pole DT_AUXILIARY na podaną nazwę. To mówi dynamicznemu linkerowi, że tablica symboli współdzielonego obiektu powinna być użyta jako filtr pomocniczy w tabeli symboli udostępnionego obiektu imię . Jeśli później połączysz program z tym obiektem filtru, po uruchomieniu programu dynamiczny linker zobaczy pole DT_AUXILIARY. Jeśli dynamiczny linker rozwiąże jakiekolwiek symbole z obiektu filtrującego, najpierw sprawdzi, czy w obiekcie współdzielonym istnieje definicja imię . Jeśli takowy istnieje, zostanie użyty zamiast definicji w obiekcie filtrującym. Obiekt udostępniony imię nie musi istnieć. Tak więc obiekt współdzielony imię może być użyty do zapewnienia alternatywnej implementacji niektórych funkcji, być może do debugowania lub do wydajności specyficznej dla komputera. Ta opcja może być podana więcej niż raz. Wpisy DT_AUXILIARY zostaną utworzone w kolejności, w jakiej pojawiają się w linii poleceń. -FA imię --filtr imię Podczas tworzenia obiektu wspólnego ELF ustaw wewnętrzne pole DT_FILTER na podaną nazwę. Mówi to dynamicznemu linkerowi, że tablica symboli tworzonego obiektu współużytkowanego powinna być używana jako filtr w tabeli symboli udostępnionego obiektu imię . Jeśli później połączysz program z tym obiektem filtru, to po uruchomieniu programu dynamiczny linker zobaczy pole DT_FILTER. Dynamiczny linker będzie normalnie przetwarzał symbole zgodnie z tabelą symboli obiektu filtrującego, ale w rzeczywistości będzie zawierał odnośniki do definicji znalezionych w obiekcie udostępnionym imię . Zatem obiekt filtru może być użyty do wyboru podzbioru symboli dostarczonych przez obiekt imię . Niektóre starsze linkery korzystały z-FA opcja w całym łańcuchu narzędzi kompilacji do określania formatu pliku obiektowego dla plików obiektów wejściowych i wyjściowych. Łącznik GNU wykorzystuje do tego celu inne mechanizmy:-b, --format, --oformat opcje, polecenie "TARGET" w skrypcie linkera i zmienną środowiskową "GNUTARGET". Łącznik GNU będzie ignorował-FA opcja, gdy nie tworzysz obiektu wspólnego ELF. -fini imię Podczas tworzenia pliku wykonywalnego ELF lub obiektu współużytkowanego, wywołaj NAME, gdy usuwany jest plik wykonywalny lub udostępniony, ustawiając DT_FINI na adres funkcji. Domyślnie linker używa funkcji "_fini" jako funkcji do wywoływania. -sol Ignorowane. Zapewniona zgodność z innymi narzędziami. -SOL wartość --gpsize = wartość Ustaw maksymalny rozmiar obiektów do optymalizacji za pomocą rejestru GP rozmiar . Ma to znaczenie tylko w przypadku formatów plików obiektowych, takich jak MIPS ECOFF, który obsługuje umieszczanie dużych i małych obiektów w różnych sekcjach. Jest to ignorowane w przypadku innych formatów plików obiektów. -h imię -soname = imię Podczas tworzenia obiektu udostępnionego ELF ustaw wewnętrzne pole DT_SONAME na podaną nazwę. Gdy plik wykonywalny jest połączony z obiektem współdzielonym, który ma pole DT_SONAME, wówczas po uruchomieniu pliku wykonywalnego łącznik dynamiczny spróbuje załadować obiekt współdzielony określony przez pole DT_SONAME, zamiast używać nazwy pliku podanej linkerowi. -ja Wykonaj przyrostowy link (tak samo jak opcja)-r). -w tym imię Podczas tworzenia pliku wykonywalnego ELF lub obiektu współużytkowanego zadzwoń do NAME po wczytaniu pliku wykonywalnego lub udostępnionego, ustawiając DT_INIT na adres funkcji. Domyślnie linker używa funkcji "_init" jako funkcji do wywoływania. -l archiwum --library = archiwum Dodaj plik archiwum archiwum do listy plików do połączenia. Ta opcja może być używana dowolną liczbę razy.ld przeszuka listę ścieżek dla wystąpienia "libarchive.a" dla każdego archiwum określony. W systemach obsługujących biblioteki współdzieloneld może również wyszukiwać biblioteki z rozszerzeniami innymi niż ".a". W szczególności w systemach ELF i SunOS,ld przeszuka katalog dla biblioteki z rozszerzeniem ".so" przed wyszukaniem katalogu z rozszerzeniem ".a". Zgodnie z konwencją rozszerzenie ".so" oznacza bibliotekę współużytkowaną. Łącznik przeszuka archiwum tylko raz, w miejscu, w którym zostanie określone w wierszu poleceń. Jeśli archiwum definiuje niezdefiniowany symbol w obiekcie, który pojawił się przed archiwum w linii poleceń, linker będzie zawierał odpowiednie pliki z archiwum. Jednak niezdefiniowany symbol w obiekcie pojawiającym się później w wierszu poleceń nie spowoduje, że linker ponownie przeszuka archiwum. Zobacz-( opcja, aby zmusić linker do wielokrotnego przeszukiwania archiwów. Możesz wielokrotnie wyświetlać to samo archiwum w wierszu poleceń. Ten rodzaj wyszukiwania archiwów jest standardem dla linkerów Unix. Jednak jeśli używaszld w systemie onAIX należy zauważyć, że różni się on od zachowania łącznika AIX. -L searchdir --library-path = searchdir Dodaj ścieżkę searchdir do listy ścieżek, któreld wyszuka biblioteki archiwum ild skrypty kontrolne. Możesz użyć tej opcji dowolną liczbę razy. Katalogi są przeszukiwane w kolejności, w jakiej zostały określone w wierszu poleceń. Katalogi określone w wierszu poleceń są przeszukiwane przed domyślnymi katalogami. Wszystko-L opcje dotyczą wszystkich-l opcje, niezależnie od kolejności wyświetlania opcji. Jeśli searchdir zaczyna się od "=", wtedy "=" zostanie zastąpione przez prefiks sysroot , ścieżka określona podczas konfigurowania linkera. Domyślny zestaw przeszukiwanych ścieżek (bez określania przy pomocy-L) zależy od trybu emulacjild używa, a w niektórych przypadkach także sposób jego konfiguracji. Ścieżki można również określić w skrypcie połączenia za pomocą komendy "SEARCH_DIR". Katalogi określone w ten sposób są wyszukiwane w punkcie, w którym skrypt linkera pojawia się w linii poleceń. -m współzawodnictwo Emuluj współzawodnictwo linker. Możesz wyświetlić listę dostępnych emulacji za pomocą--gadatliwy lub-Vopcje. Jeśli-m opcja nie jest używana, emulacja jest pobierana ze zmiennej środowiskowej "LDEMULATION", jeśli jest zdefiniowana. W przeciwnym razie domyślna emulacja zależy od konfiguracji konfiguratora. -M --print-map Wydrukuj mapę linków na standardowe wyjście. Mapa linków zawiera informacje o łączu, w tym: * Gdzie pliki obiektów i symbole są mapowane do pamięci. * Jak przydzielane są zwykłe symbole. * Wszyscy członkowie archiwum umieszczeni w odnośniku, ze wzmianką o symbolu, który spowodował dołączenie członka archiwum. -n --nmagic Wyłącz wyrównanie strony sekcji i zaznacz wyjście jako "NMAGIC", jeśli to możliwe. -N --omagic Ustaw sekcje tekstu i danych tak, aby były czytelne i możliwe do zapisu. Ponadto nie należy dopasowywać strony segmentu danych i wyłączać łączenia z bibliotekami współużytkowanymi. Jeśli format wyjściowy obsługuje numery magiczne w stylu Unix, oznacz wynik jako "OMAGIC". - nie-omagiczne Ta opcja neguje większość efektów-N opcja. Ustawia sekcję tekstu jako tylko do odczytu i wymusza wyrównanie strony segmentu danych. Uwaga: ta opcja nie umożliwia łączenia z bibliotekami współużytkowanymi. Posługiwać się-Bdynamiczny dla tego. -o wydajność --output = wydajność Posługiwać się wydajność jako nazwa programu wyprodukowanego przezld; jeśli ta opcja nie jest określona, nazwa a.out jest używany domyślnie. Polecenie skryptu "OUTPUT" może również określać nazwę pliku wyjściowego. -O poziom Jeśli poziom jest wartością numeryczną większą od zerald optymalizuje wyjście. Może to trwać znacznie dłużej i dlatego prawdopodobnie powinno być włączone tylko dla końcowego pliku binarnego. -q --emit-relocs Pozostaw sekcje relokacji i zawartość w pełni połączonych wykonaniach. Narzędzia do analizy linków i optymalizacji linków mogą potrzebować tych informacji w celu wykonania poprawnych modyfikacji plików wykonywalnych. Powoduje to większe pliki wykonywalne. Ta opcja jest obecnie obsługiwana tylko na platformach ELF. -r --relocableable Generuj relokowalne wyjście - to znaczy generuj plik wyjściowy, który z kolei może służyć jako wejścield. Jest to często nazywane częściowe łączenie . Jako efekt uboczny, w środowiskach, które obsługują standardowe magiczne numery Unix, ta opcja ustawia magiczny numer pliku wyjściowego na "OMAGIC". Jeśli ta opcja nie zostanie określona, tworzony jest plik bezwzględny. Podczas łączenia programów w C ++, ta opcja nie będzie rozwiązać odniesienia do konstruktorów; Aby to zrobić, użyj-Ur. Gdy plik wejściowy nie ma tego samego formatu co plik wyjściowy, łączenie częściowe jest obsługiwane tylko wtedy, gdy ten plik wejściowy nie zawiera żadnych przesunięć. Różne formaty wyjściowe mogą mieć dodatkowe ograniczenia; na przykład niektóre formaty oparte na "a.out" w ogóle nie obsługują częściowego łączenia z plikami wejściowymi w innych formatach. Ta opcja działa tak samo jak-ja. -R Nazwa pliku --just-symbols = Nazwa pliku Odczytaj nazwy symboli i ich adresy od Nazwa pliku , ale nie przesuwaj go ani nie dołączaj do wyjścia. Dzięki temu plik wyjściowy będzie symbolicznie odnosił się do absolutnych lokalizacji pamięci zdefiniowanych w innych programach. Możesz użyć tej opcji więcej niż raz. W celu zapewnienia kompatybilności z innymi łącznikami ELF, jeśli-R po opcji następuje nazwa katalogu, a nie nazwa pliku, to jest traktowane jako-rpath opcja. -s --strip-all Pomiń wszystkie informacje o symbolu z pliku wyjściowego. -S --strip-debug Pomiń informacje o symbolu debuggera (ale nie wszystkie symbole) z pliku wyjściowego. -t --ślad Wydrukuj nazwy plików wejściowych jakold przetwarza je. -T plik skryptu --script = plik skryptu Posługiwać się plik skryptu jako skrypt linkera. Ten skrypt zastępujeldto domyślny skrypt linkera (a nie dodawanie do niego), czyli plik polecenia musi określać wszystko, co jest niezbędne do opisania pliku wyjściowego. Jeśli plik skryptu nie istnieje w bieżącym katalogu, "ld" szuka go w katalogach określonych przez poprzednie-L opcje. Wielokrotność-T opcje akumuluj. -u symbol --undefined = symbol Siła symbol do wprowadzenia w pliku wyjściowym jako niezdefiniowany symbol. Może to spowodować na przykład połączenie dodatkowych modułów ze standardowych bibliotek.-u można powtórzyć z różnymi argumentami opcji, aby wprowadzić dodatkowe niezdefiniowane symbole. Ta opcja jest odpowiednikiem polecenia skryptu linkera "EXTERN". -Ur W przypadku programów innych niż C ++ ta opcja jest równoważna-r: generuje relokowalne wyjście - to jest plik wyjściowy, który z kolei może służyć jako wejścield. Podczas łączenia programów w C ++-Ur robi rozwiązuje odwołania do konstruktorów, w przeciwieństwie do-r. To nie działa-Ur na plikach, które same były połączone-Ur; po zbudowaniu tabeli konstruktorów nie można jej dodać. Posługiwać się-Ur tylko dla ostatniego łącza częściowego, oraz-r dla innych. --unique = SEKCJA Tworzy oddzielną sekcję wyjściową dla każdej dopasowanej sekcji wejściowej SEKCJA lub opcjonalny symbol wieloznaczny SEKCJA brak argumentu dla każdej osieroconej sekcji wejściowej. Sekcja osierocona nie jest wymieniona w skrypcie linkera. Możesz użyć tej opcji wiele razy w linii poleceń; Zapobiega normalnemu łączeniu sekcji wejściowych o tej samej nazwie, nadpisując przypisania sekcji wyjściowych w skrypcie linkera. -v --wersja -V Wyświetl numer wersji dlald. The-V opcja wyświetla również obsługiwane emulacje. -x - wszystko - zapomnieć Usuń wszystkie lokalne symbole. -X - miejscowi mieszkańcy Usuń wszystkie tymczasowe symbole lokalne. W przypadku większości celów są to wszystkie lokalne symbole, których nazwy zaczynają się odL. -y symbol --trace-symbol = symbol Wydrukuj nazwę każdego połączonego pliku, w którym symbol pojawia się. Ta opcja może być podana dowolną liczbę razy. W wielu systemach konieczne jest dodanie znaku podkreślenia. Ta opcja jest przydatna, gdy w łączu masz niezdefiniowany symbol, ale nie wiesz, skąd pochodzi wzmianka. -Y ścieżka Dodaj ścieżka do domyślnej ścieżki wyszukiwania biblioteki. Ta opcja istnieje dla zgodności z systemem Solaris. -z słowo kluczowe Rozpoznane słowa kluczowe to "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", "origin", "combreloc", "nocombreloc" i "nocopyreloc" ". Pozostałe słowa kluczowe są ignorowane ze względu na zgodność z systemem Solaris. "initfirst" oznacza obiekt, który ma być zainicjalizowany jako pierwszy w czasie wykonywania przed innymi obiektami."interpose" oznacza obiekt, którego tablica symboli wstawia przed wszystkimi symbolami, ale główny plik wykonywalny. "loadfltr" oznacza obiekt, który filsery są przetwarzane natychmiast w czasie wykonywania. "nodefaultlib" zaznacza obiekt, który będzie ignorował wyszukiwanie zależności tego obiektu dowolne domyślne ścieżki wyszukiwania biblioteki. "nodelete" oznacza, że obiekt nie powinien być rozładowywany w czasie wykonywania. "nodlopen" oznacza obiekt niedostępny dla "dlopen". "nodump" oznacza, że obiekt nie może być odrzucony przez "dldump". "teraz" oznacza obiekt z niewzruszonym wiązaniem środowiska wykonawczego. "Początek" oznacza, że obiekt może zawierać $ ORIGIN. "defs" blokuje niezdefiniowane symbole. "muldefs" pozwala na wiele definicji. "combreloc" łączy wiele sekcji reloc i sortuje je, aby umożliwić dynamiczne buforowanie wyszukiwania symboli. "nocombreloc" wyłącza łączenie wielu sekcji relokacji. "nocopyreloc" wyłącza produkcję relokatów kopii. -( archiwa -) --start-group archiwa --end-group The archiwa powinna być lista plików archiwum. Mogą to być jawne nazwy plików lub-lopcje. Określone archiwa są wielokrotnie przeszukiwane, dopóki nie zostaną utworzone żadne niezdefiniowane odwołania. 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ń, linker nie będzie w stanie rozstrzygnąć tego odwołania. Grupując archiwa, wszystkie są wyszukiwane wielokrotnie, aż wszystkie możliwe referencje zostaną rozwiązane. Korzystanie z tej opcji wiąże się ze znacznymi kosztami wydajności. Najlepiej używać go tylko wtedy, gdy istnieją nieuniknione okrężne odniesienia między dwoma lub więcej archiwami. --accept-unknown-input-arch --no-accept-unknown-input-arch Informuje linker, aby zaakceptował pliki wejściowe, których architektury nie można rozpoznać. Zakłada się, że użytkownik wie, co robi i celowo chce połączyć w tych nieznanych plikach wejściowych. Było to domyślne zachowanie linkera przed wydaniem 2.14. Domyślnym zachowaniem od wersji 2.14 jest odrzucanie takich plików wejściowych, a więc--accept-unknown-input-arch dodano opcję, aby przywrócić stare zachowanie. -zapewniać słowo kluczowe Ta opcja jest ignorowana w przypadku zgodności z SunOS. -Bdynamiczny -dy -call_shared Link do bibliotek dynamicznych. Ma to znaczenie tylko na platformach, dla których obsługiwane są biblioteki współdzielone. Ta opcja jest zwykle domyślna na takich platformach. Różne warianty tej opcji dotyczą kompatybilności z różnymi systemami. Możesz użyć tej opcji kilka razy w wierszu poleceń: wpływa na wyszukiwanie biblioteki-l opcje, które go śledzą. -Bgroup Ustaw flagę "DF_1_GROUP" w pozycji "DT_FLAGS_1" w sekcji dynamicznej. Powoduje to, że łącznik wykonawczy traktuje wyszukiwania w tym obiekcie, a jego zależności są wykonywane tylko wewnątrz grupy.--no-undefined jest dorozumiane. Ta opcja ma znaczenie tylko na platformach ELF, które obsługują biblioteki współdzielone. -Bstatic -dn -non_shared -statyczny Nie łącz z bibliotekami współużytkowanymi. Ma to znaczenie tylko na platformach, dla których obsługiwane są biblioteki współdzielone. Różne warianty tej opcji dotyczą kompatybilności z różnymi systemami. Możesz użyć tej opcji kilka razy w wierszu poleceń: wpływa na wyszukiwanie biblioteki-l opcje, które go śledzą. -Bsymboliczny Podczas tworzenia biblioteki współużytkowanej należy odwoływać się do symboli globalnych do definicji w bibliotece współużytkowanej, jeśli taka istnieje. Zwykle program powiązany z biblioteką współdzieloną może zastąpić definicję w bibliotece współdzielonej. Ta opcja ma znaczenie tylko na platformach ELF, które obsługują biblioteki współdzielone. - check-sekcje --no-check-sections Pyta linkera nie aby sprawdzić adresy sekcji po ich przypisaniu, aby sprawdzić, czy nie zachodzą one na siebie. Zwykle linker wykona tę kontrolę, a jeśli znajdzie jakieś nakładanie, wygeneruje odpowiednie komunikaty o błędach. Linker wie o tym i uwzględnia sekcje w nakładkach. Domyślne zachowanie można przywrócić, używając przełącznika wiersza poleceń- check-sekcje. --cref Wyprowadź tabelę porównawczą. Jeśli generowany jest plik mapy linkera, tabela odsyłaczy jest drukowana do pliku mapy. W przeciwnym razie jest drukowany na standardowym wyjściu. Format tabeli jest celowo prosty, aby w razie potrzeby mógł być łatwo przetworzony przez skrypt. Symbole są drukowane, posortowane według nazwy. Dla każdego symbolu podano listę nazw plików. Jeśli symbol jest zdefiniowany, pierwszym wymienionym plikiem jest lokalizacja definicji. Pozostałe pliki zawierają odniesienia do symbolu. --no-define-common Ta opcja blokuje przypisywanie adresów do popularnych symboli. Polecenie skryptu "INHIBIT_COMMON_ALLOCATION" ma taki sam efekt. The--no-define-common opcja umożliwia uniezależnienie decyzji o przypisaniu adresów do Typowych symboli z wyboru typu pliku wyjściowego; w przeciwnym razie niezwiązany typ wyjścia wymusza przypisywanie adresów do symboli wspólnych. Za pomocą--no-define-common pozwala, aby do symboli wspólnych, które są przywoływane z biblioteki współdzielonej, przypisywane były tylko adresy w programie głównym. Eliminuje to nieużywane zduplikowane miejsce w bibliotece współdzielonej, a także zapobiega ewentualnemu pomyłkom, które uniemożliwiają rozwiązanie do niewłaściwego duplikatu, gdy istnieje wiele modułów dynamicznych z wyspecjalizowanymi ścieżkami wyszukiwania dla rozpoznawania symboli w czasie wykonywania. --defsym symbol = wyrażenie Utwórz globalny symbol w pliku wyjściowym, zawierający bezwzględny adres podany przez wyrażenie . Możesz użyć tej opcji tyle razy, ile potrzeba, aby zdefiniować wiele symboli w linii poleceń. Ograniczona forma arytmetyczna jest obsługiwana dla wyrażenie w tym kontekście: możesz podać stałą szesnastkową lub nazwę istniejącego symbolu lub użyć "+" i "-", aby dodać lub odjąć szesnastkowe stałe lub symbole. Jeśli potrzebujesz bardziej złożonych wyrażeń, rozważ użycie języka poleceń linkera ze skryptu. Uwaga: nie powinno być odstępu między białymi symbol , znak równości ("=''), i wyrażenie . --demangle = styl --no-demangle Te opcje kontrolują, czy należy demolować nazwy symboli w komunikatach o błędach i innych danych wyjściowych. Kiedy linker zostanie poproszony o rozróżnienie, próbuje przedstawić czytelnie nazwy symboli w sposób czytelny: usuwa on wiodące podkreślenia, jeśli są one używane przez format pliku obiektowego, i konwertuje zmanipulowane nazwy symboli C ++ na nazwy czytelne dla użytkownika. Różne kompilatory mają różne style mangowania. Opcjonalny argument stylu demangowania może być użyty do wyboru odpowiedniego stylu rozplątania dla kompilatora. Linker będzie domyślnie demolowany, chyba że jest to zmienna środowiskowaCOLLECT_NO_DEMANGLE jest ustawiony. Te opcje mogą być użyte do zastąpienia wartości domyślnej. --dynamic-linker plik Ustaw nazwę dynamicznego linkera. Ma to znaczenie tylko przy generowaniu dynamicznie połączonych plików wykonywalnych ELF. Domyślny dynamiczny linker jest zwykle poprawny; nie używaj tego, chyba że wiesz, co robisz. --embedded-relocs Ta opcja ma sens tylko przy łączeniu kodu PIC wbudowanego w MIPS, wygenerowanego przez opcję -membedded-pic do kompilatora GNU i asemblera. Powoduje to, że linker tworzy tabelę, która może być użyta w środowisku wykonawczym do przeniesienia dowolnych danych zainicjowanych statycznie do wartości wskaźników. Zobacz kod w testsuite / ld-empic w celu uzyskania szczegółowych informacji. - ostrzeżenia o niebezpieczeństwie śmierci Traktuj wszystkie ostrzeżenia jako błędy. --force-exe-suffix Upewnij się, że plik wyjściowy ma przyrostek .exe. Jeśli pomyślnie skompilowany, w pełni połączony plik wyjściowy nie ma przyrostka ".exe" lub ".dll", opcja ta zmusza linker do skopiowania pliku wyjściowego na jedno o tej samej nazwie z przyrostkiem ".exe". Ta opcja jest przydatna podczas używania niezmodyfikowanych plików Makexów systemu Unix na hoście Microsoft Windows, ponieważ niektóre wersje systemu Windows nie uruchamiają obrazu, chyba że kończy się on sufiksem ".exe". --no-gc-sekcje --grupy gc Włącz usuwanie nieużywanych sekcji wejściowych. Jest ignorowany w przypadku celów, które nie obsługują tej opcji. Ta opcja nie jest zgodna z-r, nie powinno też być używane z dynamicznym łączeniem. Domyślne zachowanie (nie wykonujące tego czyszczenia pamięci) można przywrócić, określając--no-gc-sekcje w linii poleceń. --Wsparcie Wydrukuj podsumowanie opcji wiersza poleceń na standardowym wyjściu i zakończ. --target-help Wydrukuj podsumowanie wszystkich opcji specyficznych dla celu na standardowym wyjściu i zakończ. -Mapa mapfile Wydrukuj mapę linków do pliku mapfile . Zobacz opis-M opcja powyżej. --no-keep-memory ld zwykle optymalizuje szybkość użycia pamięci przez buforowanie tabel symboli plików wejściowych w pamięci. Ta opcja mówild zamiast tego optymalizować wykorzystanie pamięci, ponownie aktualizując tabele symboli. Może to być wymagane, jeślild zabraknie miejsca w pamięci podczas łączenia dużego pliku wykonywalnego. --no-undefined -z defs Zwykle podczas tworzenia niesymbolicznej biblioteki współużytkowanej niezdefiniowane symbole są dozwolone i pozostawione do rozstrzygnięcia przez program ładujący środowisko wykonawcze. Te opcje uniemożliwiają takie niezdefiniowane symbole. --allow-wiele definicji -z muldefs Zwykle, gdy symbol jest zdefiniowany wiele razy, linker zgłosi błąd krytyczny. Te opcje dopuszczają wiele definicji, a pierwsza definicja będzie używana. --allow-shlib-undefined Zezwalaj niezdefiniowanym symbolom na współdzielone obiekty, nawet jeśli ustawiono --no-undefined. Wynik netto będzie taki, że niezdefiniowane symbole w zwykłych obiektach nadal będą powodować błąd, ale niezdefiniowane symbole w obiektach wspólnych będą ignorowane. Implementacja no_undefined powoduje założenie, że linker środowiska wykonawczego będzie dławił niezdefiniowane symbole. Jednak istnieje co najmniej jeden system (BeOS), w którym niezdefiniowane symbole w bibliotekach współdzielonych są normalne, ponieważ jądro łata je w czasie ładowania, aby wybrać, która funkcja jest najbardziej odpowiednia dla bieżącej architektury. TO ZNACZY. dynamicznie wybierz odpowiednią funkcję zestawu. Wygląda na to, że biblioteki wspólne HPPA mają również normalne niezdefiniowane symbole. --no-undefined-version Zwykle, gdy symbol ma nieokreśloną wersję, linker zignoruje go. Ta opcja blokuje symbole o niezdefiniowanej wersji, a zamiast tego zostanie wygenerowany błąd krytyczny. --nieumiejętność nienakładania ostrzeżeń Zwykleld spowoduje błąd, jeśli spróbujesz połączyć ze sobą pliki wejściowe, które są niedopasowane z jakiegoś powodu, być może dlatego, że zostały skompilowane dla różnych procesorów lub dla różnych endiannesses. Ta opcja mówild że powinno to w milczeniu pozwolić na takie możliwe błędy. Ta opcja powinna być używana tylko ostrożnie, w przypadku, gdy podjąłeś jakieś specjalne działanie, które gwarantuje, że błędy linkera są niewłaściwe. --no-całe-archiwum Wyłącz efekt- całe-archiwum opcja dla kolejnych plików archiwalnych. --noinhibit-exec Zachowaj plik wynikowy, gdy będzie on nadal użyteczny.Zwykle linker nie wytworzy pliku wyjściowego, jeśli napotka błędy podczas procesu łączenia; wychodzi bez zapisywania pliku wyjściowego, gdy wystąpi jakikolwiek błąd. -nostdlib Tylko katalogi biblioteki wyszukiwania jawnie określone w wierszu poleceń. Katalogi bibliotek określone w skryptach linkera (w tym skrypty linkera określone w wierszu poleceń) są ignorowane. --oformat format wyjściowy ld może być skonfigurowany do obsługi więcej niż jednego rodzaju pliku obiektowego. Jeżeli twójld jest skonfigurowany w ten sposób, możesz użyć--oformat opcja określenia formatu binarnego dla pliku obiektu wyjściowego. Nawet kiedyld jest skonfigurowany do obsługi alternatywnych formatów obiektów, zazwyczaj nie musisz tego określać, jakold powinien być skonfigurowany tak, aby tworzył jako domyślny format wyjściowy najbardziej typowy format na każdym komputerze. format wyjściowy to ciąg tekstowy, nazwa konkretnego formatu obsługiwanego przez biblioteki BFD. (Możesz wyświetlić listę dostępnych formatów binarnych za pomocąobjdump -i.) Polecenie skryptu "OUTPUT_FORMAT" może również określać format wyjściowy, ale opcja ta zastępuje go. -qmagic Ta opcja jest ignorowana w przypadku zgodności z systemem Linux. -Qy Ta opcja jest ignorowana w przypadku zgodności z SVR4. --zrelaksować się Opcja z efektami zależnymi od maszyny. Ta opcja jest obsługiwana tylko w przypadku kilku celów. Na niektórych platformach--zrelaksować się opcja wykonuje globalne optymalizacje, które stają się możliwe, gdy linker rozwiązuje adresowanie w programie, takie jak relaksacyjne tryby adresu i syntetyzuje nowe instrukcje w wyjściowym pliku obiektów. Na niektórych platformach globalne optymalizacje czasu połączenia mogą uniemożliwić symboliczne debugowanie wynikowego pliku wykonywalnego. Jest tak w przypadku rodziny procesorów Matsushita MN10200 i MN10300. Na platformach, na których nie jest to obsługiwane,--zrelaksować się jest akceptowane, ale ignorowane. --retain-symbols-file Nazwa pliku Zachować tylko symbole wymienione w pliku Nazwa pliku , odrzucając wszystkie pozostałe. Nazwa pliku jest po prostu plikiem płaskim, z jedną nazwą symbolu w linii. Ta opcja jest szczególnie przydatna w środowiskach (takich jak VxWorks), gdzie duża globalna tablica symboli gromadzi się stopniowo, aby zachować pamięć czasu pracy. --retain-symbols-file robi nie odrzucić niezdefiniowane symbole lub symbole potrzebne do przeniesienia. Możesz tylko określić--retain-symbols-file raz w linii poleceń. Zastępuje-s i-S. -rpath reż Dodaj katalog do ścieżki wyszukiwania biblioteki uruchomieniowej. Jest to używane podczas łączenia ELFexecutable z obiektami współużytkowanymi. Wszystko-rpath Argumenty są łączone i przekazywane do łącznika środowiska wykonawczego, który wykorzystuje je do lokalizowania obiektów współużytkowanych w środowisku wykonawczym. The-rpath opcja jest również używana podczas lokalizowania obiektów współużytkowanych, które są wymagane przez obiekty udostępnione jawnie zawarte w łączu; patrz opis-rpath-link opcja. Jeśli-rpath nie jest używane podczas łączenia pliku wykonywalnego ELF, zawartość zmiennej środowiskowej "LD_RUN_PATH" będzie używana, jeśli jest zdefiniowana. The-rpath opcja może być również używana w SunOS. Domyślnie na SunOS linker utworzy łatkę wyszukiwania środowiska wykonawczego ze wszystkich-L opcje są podane. Jeśli-rpath Opcja jest używana, ścieżka wyszukiwania środowiska wykonawczego zostanie utworzona wyłącznie za pomocą-rpath opcje, ignorując-Lopcje. Może to być przydatne podczas używania gcc, który dodaje wiele-L opcje, które mogą być na systemach plików podłączonych do systemu NTFS. W celu zapewnienia kompatybilności z innymi łącznikami ELF, jeśli-R po opcji następuje nazwa katalogu, a nie nazwa pliku, to jest traktowane jako-rpath opcja. -rpath-link DIR Podczas korzystania z ELF lub SunOS jedna wspólna biblioteka może wymagać innej. Dzieje się tak, gdy łącze "ld -shared" zawiera bibliotekę współdzieloną jako jeden z plików wejściowych. Kiedy linker napotyka na taką zależność podczas wykonywania niewspólnego, nie podlegającego relokacji łącza, automatycznie spróbuje zlokalizować wymaganą bibliotekę współdzieloną i zamieścić ją w łączu, jeśli nie jest ona zawarta jawnie. W takim przypadku-rpath-link opcja określa pierwszy zestaw katalogów do przeszukania. The-rpath-link opcja może określać sekwencję nazw katalogów, określając listę nazw oddzielonych dwukropkami lub wyświetlając wiele razy. Tej opcji należy używać ostrożnie, ponieważ zastępuje ona ścieżkę wyszukiwania, która mogła zostać trud- no wkompilowana w bibliotekę współużytkowaną. W takim przypadku możliwe jest nieumyślne użycie innej ścieżki wyszukiwania niż robiłby linker wykonawczy. Łącznik używa następujących ścieżek wyszukiwania, aby zlokalizować wymagane biblioteki współdzielone. 1. Wszystkie katalogi określone przez-rpath-link opcje. 2. Wszystkie katalogi określone przez-rpath opcje. Różnica pomiędzy-rpath i-rpath-link to katalogi określone przez-rpath opcje są zawarte w pliku wykonywalnym i używane w czasie wykonywania, podczas gdy-rpath-link opcja działa tylko w czasie połączenia. Jest przeznaczony tylko dla macierzystego łącznika. 3. W systemie ELF, jeśli-rpath i nie użyto opcji "rpath-link", przeszukaj zawartość zmiennej środowiskowej "LD_RUN_PATH". Jest przeznaczony tylko dla macierzystego łącznika. 4. Na SunOS, jeśli-rpath opcja nie była używana, wyszukaj wszystkie katalogi określone przy użyciu-L opcje. 5. Dla natywnego linkera zawartość zmiennej środowiskowej "LD_LIBRARY_PATH". 6. W przypadku natywnego łącznika ELF, katalogi w "DT_RUNPATH" lub "DT_RPATH" biblioteki współdzielonej są wyszukiwane dla potrzebnych bibliotek współdzielonych.Pozycje "DT_RPATH" są ignorowane, jeśli istnieją wpisy "DT_RUNPATH". 7. Domyślnie katalogi / lib i / usr / lib . 8. Dla natywnego linkera w systemie ELF, jeśli plik /etc/ld.so.conf istnieje, lista katalogów znalezionych w tym pliku. Jeśli wymagana biblioteka współdzielona nie zostanie znaleziona, linker wyświetli ostrzeżenie i będzie kontynuował połączenie. -shared -BBable Utwórz udostępnioną bibliotekę. Jest to obecnie obsługiwane tylko na platformach ELF, XCOFF i SunOS. W SunOS linker automatycznie utworzy bibliotekę współdzieloną, jeśli-mi opcja nie jest używana i w linku znajdują się niezdefiniowane symbole. --sort-common Ta opcja mówild aby posortować popularne symbole według rozmiaru, gdy umieszcza je w odpowiednich sekcjach wyjściowych. Najpierw przychodzą wszystkie symbole jednobajtowe, potem wszystkie dwa bajty, potem wszystkie cztery bajty, a potem wszystko inne. Ma to na celu zapobieganie powstawaniu przerw między symbolami ze względu na ograniczenia dopasowania. --split-by-file rozmiar Podobny do--split-by-reloc ale tworzy nową sekcję wyjściową dla każdego pliku wejściowego, kiedy rozmiar został osiągnięty. rozmiar domyślnie ma rozmiar 1, jeśli nie podano. --split-by-reloc liczyć Próbuje utworzyć dodatkowe sekcje w pliku wyjściowym, aby żadna sekcja wyjściowa w pliku nie zawierała więcej niż liczyć relokacje. Jest to użyteczne podczas generowania ogromnych plików relokowalnych do pobrania w niektórych jądrach w czasie rzeczywistym za pomocą formatu pliku obiektów COFF; ponieważ COFFcannot reprezentuje więcej niż 65535 przemieszczeń w jednej sekcji. Zauważ, że nie zadziała to w przypadku formatów plików obiektowych, które nie obsługują dowolnych sekcji. Łącznik nie podzieli poszczególnych sekcji wejściowych w celu redystrybucji, więc jeśli pojedyncza sekcja wejściowa zawiera więcej niż liczyć Relokacje w jednej sekcji wyjściowej będą zawierały wiele przeniesień. liczyć domyślna wartość to 32768. --stats Oblicz i wyświetlaj statystyki dotyczące działania łącznika, takie jak czas wykonania i użycie pamięci. --tradycyjny format W przypadku niektórych celów wynik wynosild różni się pod pewnymi względami od wyników niektórych istniejących łączników. To żądanie przełącznikald zamiast tego używać formatu tradycyjnego. Na przykład na SunOS,ld łączy zduplikowane wpisy w tabeli łańcuchów symboli. Może to zmniejszyć rozmiar pliku wyjściowego o pełne informacje o debugowaniu o ponad 30 procent. Niestety, program "dbx" SunOS nie może odczytać powstałego programu ("gdb" nie ma problemu). The--tradycyjny format switch tellsld aby nie łączyć zduplikowanych wpisów. --sekcja-start nazwa sekcji = org Zlokalizuj sekcję w pliku wyjściowym pod bezwzględnym adresem podanym przez org . Możesz użyć tej opcji tyle razy, ile potrzeba, aby zlokalizować wiele sekcji w linii poleceń. org musi być pojedynczą liczbą szesnastkową; dla kompatybilności z innymi linkerami możesz pominąć prowadzący0x zwykle związane z wartościami szesnastkowymi. Uwaga: nie powinno być odstępu między białymi nazwa sekcji , znak równości ("=''), i org . -Tbss org -Tdata org -Tekst org Posługiwać się org jako adres początkowy dla --- odpowiednio --- "bss", "data" lub segment "tekstowy" pliku wyjściowego. org musi być pojedynczą liczbą szesnastkową; dla kompatybilności z innymi linkerami możesz pominąć prowadzący0x zwykle związane z wartościami szesnastkowymi. --dll-verbose --gadatliwy Wyświetl numer wersji dlald i wymień obsługiwane emulatory linkera. Wyświetlaj, które pliki wejściowe mogą i nie mogą być otwierane. Wyświetl skrypt linkera używany przez linker. --version-script = wersja-skryptowy plik Podaj nazwę skryptu wersji do linkera. Jest to zwykle używane podczas tworzenia bibliotek współdzielonych w celu określenia dodatkowych informacji o hierarchii wersji dla tworzonej biblioteki. Ta opcja ma znaczenie tylko na platformach ELF, które obsługują biblioteki współdzielone. - Ostrze-wspólne Ostrzegaj, gdy wspólny symbol jest połączony z innym wspólnym symbolem lub z definicją symbolu. Łączniki Unix pozwalają na tę nieco niechlujną praktykę, ale linkery w niektórych innych systemach operacyjnych tego nie robią. Ta opcja pozwala znaleźć potencjalne problemy związane z łączeniem symboli globalnych. Niestety, niektóre biblioteki C używają tej praktyki, więc możesz otrzymać ostrzeżenia o symbolach w bibliotekach, jak również w twoich programach. Istnieją trzy rodzaje symboli globalnych, zilustrowane tutaj przez przykłady C: int i = 1; Definicja, która znajduje się w zainicjalizowanej sekcji danych pliku wyjściowego. extern int i; Niezdefiniowana referencja, która nie przydziela miejsca. Musi być gdzieś definicja lub wspólny symbol zmiennej. int i; Wspólny symbol. Jeśli istnieją tylko (jeden lub więcej) wspólnych symboli dla zmiennej, przechodzi ona w niezainicjowany obszar danych pliku wyjściowego. Łącznik scala wiele wspólnych symboli dla tej samej zmiennej w jeden symbol. Jeśli mają różne rozmiary, wybiera największy rozmiar. Łącznik zamienia wspólny symbol na deklarację, jeśli istnieje definicja tej samej zmiennej. The- Ostrze-wspólne opcja może wytworzyć pięć rodzajów ostrzeżeń. Każde ostrzeżenie składa się z pary linii: pierwsza opisuje napotkany symbol, a druga opisuje poprzedni symbol napotkany z tą samą nazwą. Jeden lub oba te dwa symbole będą wspólnym symbolem. 1. Przekształcanie wspólnego symbolu w referencję, ponieważ istnieje już definicja symbolu. (): ostrzeżenie: wspólne z `"nadpisany z definicji (): ostrzeżenie: zdefiniowane tutaj2. Przekształcanie wspólnego symbolu w referencję, ponieważ napotkano późniejszą definicję symbolu. Jest to to samo, co poprzedni przypadek, z tym że symbole są napotykane w innej kolejności. (): warning: definicja `"nadrzędny wspólny (): ostrzeżenie: często jest tutaj3. Łączenie wspólnego symbolu z poprzednim wspólnym symbolem o tym samym rozmiarze. (): warning: wielokrotny wspólny z `' (): ostrzeżenie: poprzedni wspólny jest tutaj4. Łączenie wspólnego symbolu z poprzednim większym wspólnym symbolem. (): ostrzeżenie: wspólne z `"nadpisany przez większy wspólny (): ostrzeżenie: większy wspólny jest tutaj5. Łączenie wspólnego symbolu z poprzednim mniejszym wspólnym symbolem. Jest to to samo, co poprzedni przypadek, z tym że symbole są napotykane w innej kolejności. (): ostrzeżenie: wspólne z `"nadrzędne mniejsze wspólne (): ostrzeżenie: mniejszy wspólny jest tutaj--warn-konstruktorzy Ostrzegaj, jeśli używane są jakiekolwiek konstruktory globalne. Jest to przydatne tylko w przypadku kilku formatów plików obiektowych. W przypadku formatów takich jak COFF lub ELF łącznik nie może wykryć użycia globalnych konstruktorów. - warn-multiple-gp Ostrzegaj, jeśli w pliku wyjściowym są wymagane wartości wielu globalnych wskaźników. Ma to znaczenie tylko w przypadku niektórych procesorów, takich jak Alpha. Konkretnie, niektóre procesory umieszczają stałe o dużej wartości w specjalnej sekcji. Specjalny rejestr (globalny wskaźnik) wskazuje środkową część tego rozdziału, dzięki czemu można skutecznie ładować stałe poprzez tryb adresowania rejestru w rejestrze bazowym. Ponieważ przesunięcie w trybie względnym rejestru podstawowego jest ustalone i względnie małe (na przykład 16 bitów), ogranicza to maksymalny rozmiar puli stałej. Dlatego w dużych programach często konieczne jest użycie wielu wartości globalnych wskaźników, aby móc adresować wszystkie możliwe stałe. Ta opcja powoduje wyświetlenie ostrzeżenia w każdym przypadku. - ostrzec - raz Ostrzegaj tylko raz dla każdego niezdefiniowanego symbolu, a nie raz dla każdego modułu, który się do niego odnosi. - warn-section-align Ostrzegaj, jeśli adres sekcji wyjściowej zostanie zmieniony z powodu wyrównania. Zazwyczaj wyrównanie zostanie ustawione przez sekcję wejściową. Adres zostanie zmieniony tylko wtedy, gdy nie zostanie wyraźnie określony; to znaczy, jeśli polecenie "SEKCJE" nie określa adresu początkowego sekcji. - całe-archiwum Dla każdego archiwum wymienionego w wierszu poleceń po- całe-archiwum opcja, włącz każdy plik obiektu w archiwum w łączu, zamiast przeszukiwać archiwum pod kątem wymaganych plików obiektów. Zwykle jest to używane do przekształcania pliku archiwum w bibliotekę współdzieloną, zmuszając każdy obiekt do dołączenia do wynikowej biblioteki współdzielonej. Ta opcja może być używana więcej niż jeden raz. Dwie uwagi podczas korzystania z tej opcji z gcc: Po pierwsze, gcc nie wie o tej opcji, więc musisz jej użyć-Wl, -whole-archive. Po drugie, nie zapomnij użyć-Wl, -no-całe-archiwumpo liście archiwów, ponieważ gcc doda do twojego linku swoją własną listę archiwów i możesz nie chcieć, aby ta flaga także miała wpływ na te archiwa. --owinąć symbol Użyj funkcji otoki dla symbol . Wszelkie niezdefiniowane odniesienia do symbol zostanie rozwiązany na "__ wrap_symbol". Wszelkie niezdefiniowane odniesienia do "__real_symbol" zostaną rozwiązane na symbol . Może to być użyte do zapewnienia opakowania dla funkcji systemowej. Funkcja opakowania powinna być nazwana "__wrap_symbol". Jeśli chce wywołać funkcję systemową, powinien wywołać "__ real_symbol". Oto prosty przykład: void * __wrap_malloc (int c) {printf ("malloc wywołany z% ld n", c); return __real_malloc (c); }Jeśli połączysz inny kod z tym plikiem przy użyciu- spin malloc, wtedy wszystkie wywołania do "malloc" wywołają funkcję "__wrap_malloc". Wywołanie "__real_malloc" w "__wrap_malloc" wywoła prawdziwą funkcję "malloc". Możesz również podać funkcję "__real_malloc", aby łącza bez--owinąć opcja się powiedzie. Jeśli to zrobisz, nie powinieneś umieszczać definicji "__ real_malloc" w tym samym pliku co "__wrap_malloc"; jeśli to zrobisz, asembler może rozwiązać połączenie, zanim linker ma szansę na zawinięcie go do "malloc". --enable-new-dtags --disable-new-dtags Ten linker może tworzyć nowe dynamiczne tagi w ELF. Ale starsze systemy ELF mogą ich nie rozumieć. Jeśli określisz--enable-new-dtags, tagi dynamiczne zostaną utworzone w razie potrzeby. Jeśli określisz--disable-new-dtags, nie zostaną utworzone żadne nowe tagi dynamiczne. Domyślnie nowe tagi dynamiczne nie są tworzone. Zauważ, że te opcje są dostępne tylko dla systemów ELF. Łącznik PE i386 PE obsługuje-shared opcja, która powoduje, że dane wyjściowe są bibliotekami dynamicznie połączonymi (DLL) zamiast zwykłego pliku wykonywalnego. Powinieneś nazwać wyjście "* .dll" kiedy używasz tej opcji. Ponadto linker w pełni obsługuje standardowe pliki "* .def", które mogą być określone w wierszu poleceń linku jak plik obiektowy (w rzeczywistości powinien poprzedzać archiwa, z których eksportuje symbole, aby zapewnić, że zostaną połączone, tak jak normalny plik obiektowy). Oprócz opcji wspólnych dla wszystkich obiektów docelowych, łącznik PE i386 obsługuje dodatkowe opcje wiersza poleceń, które są specyficzne dla celu i386 PE. Opcje pobierające wartości mogą być oddzielone od ich wartości znakiem spacji lub znaku równości. --add-stdcall-alias Jeśli podano, symbole z sufiksem stdcall (@ nn ) zostaną wyeksportowane tak jak są, a także z usuniętym przyrostkiem. - plik bazowy plik Posługiwać się plik