Scroll to navigation

LD(1) Instrumente pentru dezvoltare(programare) GNU LD(1)

NUME

ld - editorul de legături GNU

SINOPSIS

ld [opțiuni] fișier-obiect ...

DESCRIERE

ld combină mai multe fișiere obiect și fișiere de arhivă, realocă datele acestora și leagă referințele simbolice. De obicei, ultimul pas în compilarea unui program este rularea comenzii ld.

ld accepts Linker Command Language files written in a superset of AT&T's Link Editor Command Language syntax, to provide explicit and total control over the linking process.

This man page does not describe the command language; see the ld entry in "info" for full details on the command language and on other aspects of the GNU linker.

This version of ld uses the general purpose BFD libraries to operate on object files. This allows ld to read, combine, and write object files in many different formats---for example, COFF or "a.out". Different formats may be linked together to produce any available kind of object file.

Pe lângă flexibilitatea sa, editorul de legături GNU este mai util decât alți editori de legături în ceea ce privește furnizarea de informații de diagnosticare. Mulți editori de legături abandonează execuția imediat ce întâlnesc o eroare; ori de câte ori este posibil, ld continuă execuția, permițându-vă să identificați alte erori (sau, în unele cazuri, să obțineți un fișier de ieșire în ciuda erorii).

Editorul de legături GNU ld este conceput pentru a acoperi o gamă largă de situații și pentru a fi cât mai compatibil cu alți editori de legături. Prin urmare, aveți la dispoziție numeroase opțiuni pentru a-i controla comportamentul.

OPȚIUNI

The linker supports a plethora of command-line options, but in actual practice few of them are used in any particular context. For instance, a frequent use of ld is to link standard Unix object files on a standard, supported Unix system. On such a system, to link a file "hello.o":

        ld -o <output> /lib/crt0.o hello.o -lc

This tells ld to produce a file called output as the result of linking the file "/lib/crt0.o" with "hello.o" and the library "libc.a", which will come from the standard search directories. (See the discussion of the -l option below.)

Some of the command-line options to ld may be specified at any point in the command line. However, options which refer to files, such as -l or -T, cause the file to be read at the point at which the option appears in the command line, relative to the object files and other file options. Repeating non-file options with a different argument will either have no further effect, or override prior occurrences (those further to the left on the command line) of that option. Options which may be meaningfully specified more than once are noted in the descriptions below.

Non-option arguments are object files or archives which are to be linked together. They may follow, precede, or be mixed in with command-line options, except that an object file argument may not be placed between an option and its argument.

Usually the linker is invoked with at least one object file, but you can specify other forms of binary input files using -l, -R, and the script command language. If no binary input files at all are specified, the linker does not produce any output, and issues the message No input files.

If the linker cannot recognize the format of an object file, it will assume that it is a linker script. A script specified in this way augments the main linker script used for the link (either the default linker script or the one specified by using -T). This feature permits the linker to link against a file which appears to be an object or an archive, but actually merely defines some symbol values, or uses "INPUT" or "GROUP" to load other objects. Specifying a script in this way merely augments the main linker script, with the extra commands placed after the main script; use the -T option to replace the default linker script entirely, but note the effect of the "INSERT" command.

For options whose names are a single letter, option arguments must either follow the option letter without intervening whitespace, or be given as separate arguments immediately following the option that requires them.

For options whose names are multiple letters, either one dash or two can precede the option name; for example, -trace-symbol and --trace-symbol are equivalent. Note---there is one exception to this rule. Multiple letter options that start with a lower case 'o' can only be preceded by two dashes. This is to reduce confusion with the -o option. So for example -omagic sets the output file name to magic whereas --omagic sets the NMAGIC flag on the output.

Argumentele opțiunilor cu mai multe litere trebuie fie separate de numele opțiunii prin semnul egal, fie prezentate ca argumente separate imediat după opțiunea care le solicită. De exemplu, --trace-symbol foo și --trace-symbol=foo sunt echivalente. Se acceptă abrevieri unice ale numelor opțiunilor cu mai multe litere.

Note---if the linker is being invoked indirectly, via a compiler driver (e.g. gcc) then all the linker command-line options should be prefixed by -Wl, (or whatever is appropriate for the particular compiler driver) like this:

          gcc -Wl,--start-group foo.o bar.o -Wl,--end-group

This is important, because otherwise the compiler driver program may silently drop the linker options, resulting in a bad link. Confusion may also arise when passing options that require values through a driver, as the use of a space between option and argument acts as a separator, and causes the driver to pass only the option to the linker and the argument to the compiler. In this case, it is simplest to use the joined forms of both single- and multiple-letter options, such as:

          gcc foo.o bar.o -Wl,-eENTRY -Wl,-Map=a.map

Iată un tabel al opțiunilor generice din linia de comandă acceptate de editorul de legături GNU:

@fișier
Citește opțiunile liniei de comandă din fișier. Opțiunile citite sunt inserate în locul opțiunii originale @fișier. Dacă fișier nu există sau nu poate fi citit, atunci opțiunea va fi tratată literal și nu va fi eliminată.

Opțiunile din fișier sunt separate prin spații albe. Un caracter de spațiere poate fi inclus într-o opțiune prin includerea întregii opțiuni între ghilimele simple sau duble. Orice caracter (inclusiv o bară oblică inversă) poate fi inclus prin prefixarea caracterului care urmează să fie inclus cu o bară oblică inversă. fișier poate conține la rândul său opțiuni @fișier suplimentare; orice astfel de opțiuni vor fi procesate în mod recursiv.

This option is supported for HP/UX compatibility. The keyword argument must be one of the strings archive, shared, or default. -aarchive is functionally equivalent to -Bstatic, and the other two keywords are functionally equivalent to -Bdynamic. This option may be used any number of times.
Adaugă AUDITLIB la intrarea "DT_AUDIT" din secțiunea dinamică. Nu se verifică existența lui AUDITLIB și nici nu va utiliza DT_SONAME specificat în bibliotecă. Dacă este specificat de mai multe ori, "DT_AUDIT" va conține o listă de interfețe de audit care trebuie utilizate, separate prin două puncte. În cazul în care editorul de legături găsește un obiect cu o intrare de audit în timpul căutării bibliotecilor partajate, acesta va adăuga o intrare "DT_DEPAUDIT" corespunzătoare în fișierul de ieșire. Această opțiune este semnificativă numai pe platformele ELF care acceptă interfața rtld-audit.
ld may be configured to support more than one kind of object file. If your ld is configured this way, you can use the -b option to specify the binary format for input object files that follow this option on the command line. Even when ld is configured to support alternative object formats, you don't usually need to specify this, as ld should be configured to expect as a default input format the most usual format on each machine. input-format is a text string, the name of a particular format supported by the BFD libraries. (You can list the available binary formats with objdump -i.)

You may want to use this option if you are linking files with an unusual binary format. You can also use -b to switch formats explicitly (when linking object files of different formats), by including -b input-format before each group of object files in a particular format.

Formatul implicit este preluat din variabila de mediu "GNUTARGET".

De asemenea, puteți defini formatul de intrare dintr-un script, utilizând comanda "TARGET";

For compatibility with linkers produced by MRI, ld accepts script files written in an alternate, restricted command language, described in the MRI Compatible Script Files section of GNU ld documentation. Introduce MRI script files with the option -c; use the -T option to run linker scripts written in the general-purpose ld scripting language. If MRI-cmdfile does not exist, ld looks for it in the directories specified by any -L options.
These three options are equivalent; multiple forms are supported for compatibility with other linkers. They assign space to common symbols even if a relocatable output file is specified (with -r). The script command "FORCE_COMMON_ALLOCATION" has the same effect.
Adaugă AUDITLIB la intrarea "DT_DEPAUDIT" din secțiunea dinamică. Nu se verifică existența lui AUDITLIB și nici nu va utiliza DT_SONAME specificat în bibliotecă. Dacă este specificat de mai multe ori, "DT_DEPAUDIT" va conține o listă de interfețe de audit care trebuie utilizate, separate prin două puncte. Această opțiune este semnificativă numai pe platformele ELF care acceptă interfața rtld-audit. Opțiunea „-P” este furnizată pentru compatibilitate cu Solaris.
Enables the "LINKER_VERSION" linker script directive, described in Output Section Data. If this directive is used in a linker script and this option has been enabled then a string containing the linker version will be inserted at the current point.

Notă – poziția acestei opțiuni în linia de comandă a editorului de legături este importantă. Aceasta va afecta doar scripturile editorului de legături care urmează după ea în linia de comandă sau care sunt integrate în editorul de legături.

Dezactivează directiva "LINKER_VERSION" a scriptului editorului de legături, astfel încât să nu introducă un șir de versiuni. Aceasta este valoarea implicită.
This option avoids generating an error if an input section does not fit a matching output section. The linker tries to allocate the input section to subseque nt matching output sections, and generates an error only if no output section is large enough. This is useful when several non-contiguous memory regions are available and the input section does not require a particular one. The order in which input sections are evaluated does not change, for instance:

          MEMORY {
            MEM1 (rwx) : ORIGIN = 0x1000, LENGTH = 0x14
            MEM2 (rwx) : ORIGIN = 0x1000, LENGTH = 0x40
            MEM3 (rwx) : ORIGIN = 0x2000, LENGTH = 0x40
          }
          SECTIONS {
            mem1 : { *(.data.*); } > MEM1
            mem2 : { *(.data.*); } > MEM2
            mem3 : { *(.data.*); } > MEM3
          }
       
          with input sections:
          .data.1: size 8
          .data.2: size 0x10
          .data.3: size 4
       
          results in .data.1 affected to mem1, and .data.2 and .data.3
          affected to mem2, even though .data.3 would fit in mem3.
    

Această opțiune este incompatibilă cu instrucțiunile INSERT, deoarece modifică modul în care secțiunile de intrare sunt corelate cu secțiunile de ieșire.

This option enables warnings when "--enable-non-contiguous-regions" allows possibly unexpected matches in sections mapping, potentially leading to silently discarding a section instead of failing because it does not fit any output region.
Use entry as the explicit symbol for beginning execution of your program, rather than the default entry point. If there is no symbol named entry, the linker will try to parse entry as a number, and use that as the entry address (the number will be interpreted in base 10; you may use a leading 0x for base 16, or a leading 0 for base 8). For i386 PE, entry can be also the original function name (without the leading underscore and/or the trailing stdcall @number when applicable).
Specifies a list of archive libraries from which symbols should not be automatically exported. The library names may be delimited by commas or colons. Specifying "--exclude-libs ALL" excludes symbols in all archive libraries from automatic export. This option is available only for the i386 PE targeted port of the linker and for ELF targeted ports. For i386 PE, symbols explicitly listed in a .def file are still exported, regardless of this option. For ELF targeted ports, symbols affected by this option will be treated as hidden.
Specifies a list of object files or archive members, from which symbols should not be automatically exported, but which should be copied wholesale into the import library being generated during the link. The module names may be delimited by commas or colons, and must match exactly the filenames used by ld to open the files; for archive members, this is simply the member name, but for object files the name listed must include and match precisely any path used to specify the input file on the linker's command-line. This option is available only for the i386 PE targeted port of the linker. Symbols explicitly listed in a .def file are still exported, regardless of this option.
When creating a dynamically linked executable, using the -E option or the --export-dynamic option causes the linker to add all symbols to the dynamic symbol table. The dynamic symbol table is the set of symbols which are visible from dynamic objects at run time.

Dacă nu utilizați niciuna dintre aceste opțiuni (sau utilizați opțiunea --no-export-dynamic pentru a restabili comportamentul implicit), tabelul de simboluri dinamice va conține în mod normal numai acele simboluri care sunt menționate de un obiect dinamic menționat în legătură.

If you use "dlopen" to load a dynamic object which needs to refer back to the symbols defined by the program, rather than some other dynamic object, then you will probably need to use this option when linking the program itself.

De asemenea, puteți utiliza lista dinamică pentru a controla simbolurile care trebuie adăugate la tabelul dinamic de simboluri, în cazul în care formatul de ieșire acceptă acest lucru. A se vedea descrierea opțiunii --dynamic-list.

Rețineți că această opțiune este specifică adaptărilor destinate formatului ELF. Adaptările destinate formatului PE acceptă o funcție similară pentru exportarea tuturor simbolurilor dintr-o DLL sau un fișier EXE; consultați descrierea opțiunii --export-all-symbols de mai jos.

When creating a dynamically linked executable, symbols matching glob will be added to the dynamic symbol table. When creating a shared library, references to symbols matching glob will not be bound to the definitions within the shared library. This option is a no-op when creating a shared library and -Bsymbolic or --dynamic-list are not specified. This option is only meaningful on ELF platforms which support shared libraries.
Specifică un --export-dynamic-symbol pentru fiecare șablon din fișier. Formatul fișierului este identic cu cel al nodului de versiune, fără domeniul de aplicare și numele nodului. Pentru mai multe informații, consultați VERSION.
Leagă obiectele big-endian. Acest lucru afectează formatul de ieșire implicit.
Leagă obiectele little-endian. Acest lucru afectează formatul de ieșire implicit.
When creating an ELF shared object, set the internal DT_AUXILIARY field to the specified name. This tells the dynamic linker that the symbol table of the shared object should be used as an auxiliary filter on the symbol table of the shared object name.

If you later link a program against this filter object, then, when you run the program, the dynamic linker will see the DT_AUXILIARY field. If the dynamic linker resolves any symbols from the filter object, it will first check whether there is a definition in the shared object name. If there is one, it will be used instead of the definition in the filter object. The shared object name need not exist. Thus the shared object name may be used to provide an alternative implementation of certain functions, perhaps for debugging or for machine-specific performance.

Această opțiune poate fi specificată de mai multe ori. Intrările DT_AUXILIARY vor fi create în ordinea în care apar în linia de comandă.

When creating an ELF shared object, set the internal DT_FILTER field to the specified name. This tells the dynamic linker that the symbol table of the shared object which is being created should be used as a filter on the symbol table of the shared object name.

If you later link a program against this filter object, then, when you run the program, the dynamic linker will see the DT_FILTER field. The dynamic linker will resolve symbols according to the symbol table of the filter object as usual, but it will actually link to the definitions found in the shared object name. Thus the filter object can be used to select a subset of the symbols provided by the object name.

Some older linkers used the -F option throughout a compilation toolchain for specifying object-file format for both input and output object files. The GNU linker uses other mechanisms for this purpose: the -b, --format, --oformat options, the "TARGET" command in linker scripts, and the "GNUTARGET" environment variable. The GNU linker will ignore the -F option when not creating an ELF shared object.

When creating an ELF executable or shared object, call NAME when the executable or shared object is unloaded, by setting DT_FINI to the address of the function. By default, the linker uses "_fini" as the function to call.
Ignorată. Furnizată pentru compatibilitatea cu alte instrumente.
Set the maximum size of objects to be optimized using the GP register to size. This is only meaningful for object file formats such as MIPS ELF that support putting large and small objects into different sections. This is ignored for other object file formats.
When creating an ELF shared object, set the internal DT_SONAME field to the specified name. When an executable is linked with a shared object which has a DT_SONAME field, then when the executable is run the dynamic linker will attempt to load the shared object specified by the DT_SONAME field rather than using the file name given to the linker.
Efectuează o legătură incrementală (la fel ca opțiunea -r).
When creating an ELF executable or shared object, call NAME when the executable or shared object is loaded, by setting DT_INIT to the address of the function. By default, the linker uses "_init" as the function to call.
Adaugă fișierul arhivă sau fișierul obiect specificat de namespec la lista de fișiere care urmează să fie legate. Această opțiune poate fi utilizată de un număr nelimitat de ori. Dacă namespec este de forma :nume-fișier, ld va căuta în ruta bibliotecii un fișier numit nume-fișier, în caz contrar va căuta în ruta bibliotecii un fișier numit libnamespec.a.

On systems which support shared libraries, ld may also search for files other than libnamespec.a. Specifically, on ELF and SunOS systems, ld will search a directory for a library called libnamespec.so before searching for one called libnamespec.a. (By convention, a ".so" extension indicates a shared library.) Note that this behavior does not apply to :filename, which always specifies a file called filename.

The linker will search an archive only once, at the location where it is specified on the command line. If the archive defines a symbol which was undefined in some object which appeared before the archive on the command line, the linker will include the appropriate file(s) from the archive. However, an undefined symbol in an object appearing later on the command line will not cause the linker to search the archive again.

Consultați opțiunea -( pentru o modalitate de a forța editorul de legături să caute arhivele de mai multe ori.

Puteți lista aceeași arhivă de mai multe ori în linia de comandă.

Acest tip de căutare în arhivă este standard pentru editorii de legături Unix. Cu toate acestea, dacă utilizați ld pe AIX, rețineți că acesta se comportă diferit față de editorul de legături AIX.

Adaugă ruta searchdir la lista de rute pe care ld le va căuta pentru biblioteci de arhivă și scripturi de control ld. Puteți utiliza această opțiune de orice număr de ori. Directoarele sunt căutate în ordinea în care sunt specificate în linia de comandă. Directoarele specificate în linia de comandă sunt căutate înaintea directoarelor implicite. Toate opțiunile -L se aplică tuturor opțiunilor -l, indiferent de ordinea în care apar opțiunile. Opțiunile -L nu afectează modul în care ld caută un script de legătură decât dacă este specificată opțiunea -T.

Dacă director-căutare începe cu "=" sau $SYSROOT, atunci acest prefix va fi înlocuit cu prefixul sysroot, controlat de opțiunea --sysroot sau specificat la configurarea editorului de legături.

Setul implicit de rute de căutare (atunci când nu este specificat cu -L) depinde de modul de emulare utilizat de ld și, în unele cazuri, și de modul în care a fost configurat.

The paths can also be specified in a link script with the "SEARCH_DIR" command. Directories specified this way are searched at the point in which the linker script appears in the command line.

Emulează emulația editorului de legături. Puteți lista emulările disponibile cu opțiunile --verbose sau -V.

Dacă opțiunea -m nu este utilizată, emulația este preluată din variabila de mediu "LDEMULATION", dacă aceasta este definită.

În caz contrar, emulația implicită depinde de modul în care a fost configurat editorul de legături.

These options allow the names of input files to be changed before the linker attempts to open them. The option --remap-inputs=foo.o=bar.o will cause any attempt to load a file called foo.o to instead try to load a file called bar.o. Wildcard patterns are permitted in the first filename, so --remap-inputs=foo*.o=bar.o will rename any input file that matches foo*.o to bar.o.

O formă alternativă a opțiunii --remap-inputs-file=nume-fișier permite citirea reasocierilor dintr-un fișier. Fiecare linie din fișier poate conține o singură reasociere. Liniile goale sunt ignorate. Orice lucru de la un caracter hash (#) până la sfârșitul unei linii este considerat un comentariu și este, de asemenea, ignorat. Modelul de asociere poate fi separat de numele fișierului prin spații albe sau printr-un caracter de egalitate (=).

The options can be specified multiple times. Their contents accumulate. The remappings will be processed in the order in which they occur on the command line, and if they come from a file, in the order in which they occur in the file. If a match is made, no further checking for that filename will be performed.

If the replacement filename is /dev/null or just NUL then the remapping will actually cause the input file to be ignored. This can be a convenient way to experiment with removing input files from a complicated build environment.

Rețineți că această opțiune depinde de poziție și afectează doar numele de fișiere care urmează după ea în linia de comandă. Astfel:

          ld foo.o --remap-inputs=foo.o=bar.o
    

Nu va avea niciun efect, întrucât:

          ld --remap-inputs=foo.o=bar.o foo.o
    

Va redenumi fișierul de intrare foo.o în bar.o.

Note - these options also affect files referenced by INPUT statements in linker scripts. But since linker scripts are processed after the entire command line is read, the position of the remap options on the command line is not significant.

If the verbose option is enabled then any mappings that match will be reported, although again the verbose option needs to be enabled on the command line before the remaped filenames appear.

Dacă opțiunile -Map sau --print-map sunt activate, lista de reasociere va fi inclusă în rezultatul asocierii.

Afișează o hartă a legăturilor la ieșirea standard. O hartă a legăturilor oferă informații despre legătură, inclusiv următoarele:
  • În cazul în care fișierele obiect sunt plasate în memorie.
  • Modul în care sunt alocate simbolurile comune.
  • Toți membrii arhivei sunt incluși în legătură, cu menționarea simbolului care a determinat introducerea membrului arhivei.
  • Valorile alocate simbolurilor.

    Note - symbols whose values are computed by an expression which involves a reference to a previous value of the same symbol may not have correct result displayed in the link map. This is because the linker discards intermediate results and only retains the final value of an expression. Under such circumstances the linker will display the final value enclosed by square brackets. Thus for example a linker script containing:

               foo = 1
               foo = foo * 4
               foo = foo + 8
        

    va produce următorul rezultat în harta de legături dacă se utilizează opțiunea -M:

               0x00000001                foo = 0x1
               [0x0000000c]                foo = (foo * 0x4)
               [0x0000000c]                foo = (foo + 0x8)
        

    A se vedea Expresii pentru mai multe informații despre expresiile din scripturile editorului de legături.

  • Modul în care sunt fuzionate proprietățile GNU.

    When the linker merges input .note.gnu.property sections into one output .note.gnu.property section, some properties are removed or updated. These actions are reported in the link map. For example:

            S-a eliminat proprietatea 0xc0000002 pentru a îmbina fișierele foo.o (0x1) și bar.o (nu a fost găsit)
        

    Acest lucru indică faptul că proprietatea 0xc0000002 este eliminată din rezultatul final la combinarea proprietăților din foo.o — a cărei valoare a proprietății 0xc0000002 este 0x1 — și bar.o, care nu conține proprietatea 0xc0000002.

            S-a actualizat proprietatea 0xc0010001 (0x1) pentru a îmbina fișierele foo.o (0x1) și bar.o (0x1)
        

    Acest lucru indică faptul că valoarea proprietății 0xc0010001 este actualizată la 0x1 în rezultatul final atunci când se combină proprietățile din foo.o, a cărui valoare a proprietății 0xc0010001 este 0x1, și bar.o, a cărui valoare a proprietății 0xc0010001 este 0x1.

  • Pe unele ținte ELF, o listă de corecții inserate de --relax

            foo.o: Ajustarea ramurii de la adresa 0x00000008 către „far” în secțiunea .text
        

    Acest lucru indică faptul că ramificația de la adresa 0x00000008 din fișierul foo.o, care vizează simbolul „far” din secțiunea .text, a fost înlocuită cu o trambulină.

Afișează (sau nu afișează) lista secțiunilor eliminate și a celor colectate de motorul de colectare a gunoiului din harta de legături. Opțiune activată implicit.
Print (or do not print) local symbols in the link map. Local symbols will have the text (local) printed before their name, and will be listed after all of the global symbols in a given section. Temporary local symbols (typically those that start with .L) will not be included in the output. Disabled by default.
Turn off page alignment of sections, and disable linking against shared libraries. If the output format supports Unix style magic numbers, mark the output as "NMAGIC".
Set the text and data sections to be readable and writable. Also, do not page-align the data segment, and disable linking against shared libraries. If the output format supports Unix style magic numbers, mark the output as "OMAGIC". Note: Although a writable text section is allowed for PE-COFF targets, it does not conform to the format specification published by Microsoft.
This option negates most of the effects of the -N option. It sets the text section to be read-only, and forces the data segment to be page-aligned. Note - this option does not enable linking against shared libraries. Use -Bdynamic for this.
Use output as the name for the program produced by ld; if this option is not specified, the name a.out is used by default. The script command "OUTPUT" can also specify the output file name.

Notă – editorul de legături va șterge fișierul de ieșire înainte de a începe să scrie în el. Va face acest lucru chiar și în cazul în care se constată că legarea nu poate fi finalizată din cauza unor erori.

Note - the linker will check to make sure that the output file name does not match the name of any of the input files, but that is all. In particular it will not complain if the output file might overwrite a source file or some other important file. Therefore in build systems it is recommended to use the -o option as the last option on the linker command line. For example consider:

          ld -o $(EXE) $(OBJS)
          ld $(OBJS) -o $(EXE)
    

If the EXE variable is not defined for some reason, the first version of the linker command could end up deleting one of the object files (the first one in the OBJS list) whereas the second version of the linker command will generate an error message and not delete anything.

Write a dependency file to depfile. This file contains a rule suitable for "make" describing the output file and all the input files that were read to produce it. The output is similar to the compiler's output with -M -MP. Note that there is no option like the compiler's -MM, to exclude "system files" (which is not a well-specified concept in the linker, unlike "system headers" in the compiler). So the output from --dependency-file is always specific to the exact state of the installation where it was produced, and should not be copied into distributed makefiles without careful editing.
If level is a numeric values greater than zero ld optimizes the output. This might take significantly longer and therefore probably should only be enabled for the final binary. At the moment this option only affects ELF shared library generation. Future releases of the linker may make more use of this option. Also currently there is no difference in the linker's behaviour for different non-zero values of this option. Again this may change with future releases.
Involve a plugin in the linking process. The name parameter is the absolute filename of the plugin. Usually this parameter is automatically added by the complier, when using link time optimization, but users can also add their own plugins if they so wish.

Note that the location of the compiler originated plugins is different from the place where the ar, nm and ranlib programs search for their plugins. In order for those commands to make use of a compiler based plugin it must first be copied into the ${libdir}/bfd-plugins directory. All gcc based linker plugins are backward compatible, so it is sufficient to just copy in the newest one.

Opțiunea --push-state permite păstrarea stării curente a fanioanelor care guvernează gestionarea fișierului de intrare, astfel încât toate acestea să poată fi restabilite cu o singură opțiune --pop-state corespunzătoare.

The option which are covered are: -Bdynamic, -Bstatic, -dn, -dy, -call_shared, -non_shared, -static, -N, -n, --whole-archive, --no-whole-archive, -r, -Ur, --copy-dt-needed-entries, --no-copy-dt-needed-entries, --as-needed, --no-as-needed și -a.

Una dintre destinațiile acestei opțiuni sunt specificațiile pentru pkg-config. Atunci când este utilizată împreună cu opțiunea --libs, toate bibliotecile care ar putea fi necesare sunt listate și, eventual, legate în mod automat. Este recomandabil să se returneze ceva precum:

        -Wl,--push-state,--as-needed -libone -libtwo -Wl,--pop-state
    
Anulează efectul opțiunii --push-state și restabilește valorile anterioare ale fanioanelor care reglementează gestionarea fișierelor de intrare.
Lasă secțiunile de realocare și conținutul în executabilele complet legate. Instrumentele de analiză și optimizare post-legare pot avea nevoie de aceste informații pentru a efectua modificări corecte ale executabilelor. Acest lucru are ca rezultat executabile mai mari.

În prezent, această opțiune este acceptată numai pe platformele ELF.

Forțează ca fișierul de ieșire să aibă secțiuni dinamice. Această opțiune este specifică obiectivelor VxWorks.
Generate relocatable output---i.e., generate an output file that can in turn serve as input to ld. This is often called partial linking. As a side effect, in environments that support standard Unix magic numbers, this option also sets the output file's magic number to "OMAGIC". If this option is not specified, an absolute file is produced. When linking C++ programs, this option will not resolve references to constructors; to do that, use -Ur.

When an input file does not have the same format as the output file, partial linking is only supported if that input file does not contain any relocations. Different output formats can have further restrictions; for example some "a.out"-based formats do not support partial linking with input files in other formats at all.

When the relocatable output contains both contents which require link-time optimization (LTO) and contents which don't require LTO, a .gnu_object_only section will be created to contain a relocatable object file, as if -r is applied to all relocatable inputs which don't require LTO. When processing a relocatable input with a .gnu_object_only section, the linker will extract the .gnu_object_only section as a separate input.

Rețineți că, întrucât -r grupează împreună anumite secțiuni din fișiere de intrare diferite, acest lucru poate avea un impact negativ asupra dimensiunii codului și asupra locației în biblioteca executabilă finală sau în biblioteca partajată.

Această opțiune face același lucru ca și opțiunea -i.

Read symbol names and their addresses from filename, but do not relocate it or include it in the output. This allows your output file to refer symbolically to absolute locations of memory defined in other programs. You may use this option more than once.

Pentru compatibilitate cu alți editori de legături ELF, dacă opțiunea -R este urmată de un nume de director, în loc de un nume de fișier, aceasta este tratată ca opțiunea -rpath.

Încearcă să se asigure că este creat doar un singur segment fără cod, numai pentru citire. Utilă numai atunci când este utilizată împreună cu opțiunea -z separate-code. Binarele rezultate ar trebui să fie mai mici decât în cazul în care -z separate-code este utilizată singură. Fără această opțiune sau dacă se specifică --no-rosegment, opțiunea -z separate-code va crea două segmente numai pentru citire, unul înaintea segmentului de cod și unul după acesta.

Numele opțiunilor sunt înșelătoare, dar au fost alese pentru ca editorul de legături să fie compatibil cu editorii de legături LLD și GOLD.

Aceste opțiuni sunt acceptate numai de țintele ELF.

Omite toate informațiile despre simboluri din fișierul de ieșire.
Omite informațiile despre simbolurile de depanare (dar nu toate simbolurile) din fișierul de ieșire.
Omite (sau nu omite) simbolurile globale definite în secțiunile eliminate. Activată în mod implicit.
Stochează permanent fișierele intermediare „temporare” ale modulului.
Print the names of the input files as ld processes them. If -t is given twice then members within archives are also printed. -t output is useful to generate a list of all the object files and scripts involved in linking, for example, when packaging files for a linker bug report.
Use scriptfile as the linker script. This script replaces ld's default linker script (rather than adding to it), unless the script contains "INSERT", so commandfile must specify everything necessary to describe the output file.

Dacă fișier-script nu există în directorul curent, «ld» îl caută în directoarele specificate de opțiunile -L precedente.

Opțiunile din linia de comandă care apar înaintea opțiunii -T pot afecta scriptul, dar opțiunile din linia de comandă care apar după aceasta nu.

Mai multe opțiuni -T se vor cumula dacă suplimentează scriptul curent; în caz contrar, va fi utilizată ultima opțiune -T care nu suplimentează scriptul.

Există și alte modalități de a specifica scripturile editorului de legături. A se vedea

Utilizează fișier-script ca script de editor de legături implicit.

This option is similar to the --script option except that processing of the script is delayed until after the rest of the command line has been processed. This allows options placed after the --default-script option on the command line to affect the behaviour of the linker script, which can be important when the linker command line cannot be directly controlled by the user. (eg because the command line is being constructed by another tool, such as gcc).

Force symbol to be entered in the output file as an undefined symbol. Doing this may, for example, trigger linking of additional modules from standard libraries. -u may be repeated with different option arguments to enter additional undefined symbols. This option is equivalent to the "EXTERN" linker script command.

Dacă această opțiune este utilizată pentru a forța introducerea de module suplimentare în legătură și dacă simbolul rămâne nedefinit ca o eroare, atunci trebuie utilizată opțiunea --require-defined.

Require that symbol is defined in the output file. This option is the same as option --undefined except that if symbol is not defined in the output file then the linker will issue an error and exit. The same effect can be achieved in a linker script by using "EXTERN", "ASSERT" and "DEFINED" together. This option can be used multiple times to require additional symbols.
For programs that do not use constructors or destructors, or for ELF based systems this option is equivalent to -r: it generates relocatable output---i.e., an output file that can in turn serve as input to ld. For other binaries however the -Ur option is similar to -r but it also resolves references to constructors and destructors.

For those systems where -r and -Ur behave differently, it does not work to use -Ur on files that were themselves linked with -Ur; once the constructor table has been built, it cannot be added to. Use -Ur only for the last partial link, and -r for the others.

Controlează modul în care sunt tratate secțiunile orfane. O secțiune orfană este una care nu este menționată în mod specific într-un script al editorului de legături.

MOD poate avea oricare dintre următoarele valori:

"place"
Secțiunile orfane sunt plasate într-o secțiune de ieșire adecvată, conform strategiei descrise în Secțiuni orfane. Opțiunea --unique influențează, de asemenea, modul în care sunt plasate secțiunile.
"discard"
Toate secțiunile orfane sunt eliminate, prin plasarea lor în secțiunea /DISCARD/.
"warn"
Editorul de legături va plasa secțiunea orfană conform „place” și va afișa, de asemenea, un avertisment.
"error"
Editorul de legături va ieși cu o eroare dacă se găsește vreo secțiune orfană.

Dacă nu se specifică opțiunea --orphan-handling, valoarea implicită este "place".

Creates a separate output section for every input section matching SECTION, or if the optional wildcard SECTION argument is missing, for every orphan input section. An orphan section is one not specifically mentioned in a linker script. You may use this option multiple times on the command line; It prevents the normal merging of input sections with the same name, overriding output section assignments in a linker script.
Afișează numărul versiunii pentru ld. Opțiunea -V enumeră și emulările acceptate. Consultați, de asemenea, descrierea opțiunii --enable-linker-version din Opțiuni,,Opțiuni din linia de comandă care poate fi utilizată pentru a introduce șirul versiunii editorului de legături într-un binar.
Șterge toate simbolurile locale.
Sterge toate simbolurile locale temporare; (aceste simboluri încep cu prefixele etichetelor locale specifice sistemului, de obicei .L pentru sistemele ELF sau L pentru sistemele tradiționale a.out).
Afișează numele fiecărui fișier legat în care simbol apare. Această opțiune poate fi specificată de câte ori se dorește. Pe multe sisteme, este necesar să se adauge un caracter de subliniere la început.

Această opțiune este utilă atunci când aveți un simbol nedefinit în legătura dvs., dar nu știți de unde provine referința.

Adaugă path la ruta de căutare implicită a bibliotecii. Această opțiune există pentru compatibilitate cu Solaris.
Cuvintele cheie recunoscute sunt:
Specify the 1-byte "NOP" padding when transforming indirect call to a locally defined function, foo, via its GOT slot. call-nop=prefix-addr generates "0x67 call foo". call-nop=suffix-nop generates "call foo 0x90". call-nop=prefix-byte generates "byte call foo". call-nop=suffix-byte generates "call foo byte". Supported for i386 and x86_64.
Specify how to report the missing GNU_PROPERTY_X86_FEATURE_1_IBT and GNU_PROPERTY_X86_FEATURE_1_SHSTK properties in input .note.gnu.property section. cet-report=none, which is the default, will make the linker not report missing properties in input files. cet-report=warning will make the linker issue a warning for missing properties in input files. cet-report=error will make the linker issue an error for missing properties in input files. Note that ibt will turn off the missing GNU_PROPERTY_X86_FEATURE_1_IBT property report and shstk will turn off the missing GNU_PROPERTY_X86_FEATURE_1_SHSTK property report. Supported for Linux/i386 and Linux/x86_64.
Combină mai multe secțiuni de realocare dinamică și sortează pentru a îmbunătăți memoria cache pentru căutarea dinamică a simbolurilor. Nu face acest lucru dacă se folosește nocombreloc.
Generează simboluri comune cu tipul STT_COMMON în timpul unei legături realocabile. Utilizează tipul STT_OBJECT dacă nocommon.
Stabilește dimensiunea paginii cea mai frecvent utilizată la valoare. Structura imaginii de memorie va fi optimizată pentru a reduce la minimum numărul de pagini de memorie, în cazul în care sistemul utilizează pagini de această dimensiune.
Raportează referințele la simboluri nedefinite din fișierele obiect obișnuite. Aceasta se întâmplă chiar și în cazul în care editorul de legături creează o bibliotecă partajată nesimbolică. Această opțiune este inversul opțiunii -z undefs.
Make undefined weak symbols dynamic when building a dynamic object, if they are referenced from a regular object file and not forced local by symbol visibility or versioning. Do not make them dynamic if nodynamic-undefined-weak. If neither option is given, a target may default to either option being in force, or make some other selection of undefined weak symbols dynamic. Not all targets support these options.
Marchează obiectul ca necesitând o stivă executabilă.
Această opțiune are sens doar atunci când se compilează un obiect partajat. Ea face ca simbolurile definite de acest obiect partajat să fie disponibile pentru rezolvarea simbolurilor din bibliotecile încărcate ulterior.
This option is only meaningful when building a dynamic executable. This option marks the executable as requiring global auditing by setting the "DF_1_GLOBAUDIT" bit in the "DT_FLAGS_1" dynamic tag. Global auditing requires that any auditing library defined via the --depaudit or -P command-line options be run for all dynamic objects loaded by the application.
Generează intrări PLT activate pentru Intel Indirect Branch Tracking (IBT). Acceptată în Linux/i386 și Linux/x86_64.
Generează GNU_PROPERTY_X86_FEATURE_1_IBT în secțiunea .note.gnu.property pentru a indica compatibilitatea cu IBT. Aceasta implică și ibtplt. Acceptată în Linux/i386 și Linux/x86_64.
Generează GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS în secțiunea .note.gnu.property pentru a indica faptul că fișierul obiect necesită indicatori de funcție canonici și nu poate fi utilizată cu „copy relocation”. Această opțiune implică, de asemenea, noextern-protected-data și nocopyreloc. Acceptată în i386 și x86-64.

noindirect-extern-access elimină GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS din secțiunea .note.gnu.property.

This option is only meaningful when building a shared object. It marks the object so that its runtime initialization will occur before the runtime initialization of any other objects brought into the process at the same time. Similarly the runtime finalization of the object will occur after the runtime finalization of any other objects.
Specifică încărcătorului dinamic să-și modifice ordinea de căutare a simbolurilor, astfel încât simbolurile din această bibliotecă partajată să aibă prioritate față de toate celelalte biblioteci partajate care nu sunt marcate în acest fel.
When generating a shared library or other dynamically loadable ELF object mark it as one that should (by default) only ever be loaded once, and only in the main namespace (when using "dlmopen"). This is primarily used to mark fundamental libraries such as libc, libpthread et al which do not usually function correctly unless they are the sole instances of themselves. This behaviour can be overridden by the "dlmopen" caller and does not apply to certain loading mechanisms (such as audit libraries).
Generează GNU_PROPERTY_X86_FEATURE_1_LAM_U48 în secțiunea .note.gnu.property pentru a indica compatibilitatea cu Intel LAM_U48. Acceptată în Linux/x86_64.
Generează GNU_PROPERTY_X86_FEATURE_1_LAM_U57 în secțiunea .note.gnu.property pentru a indica compatibilitatea cu Intel LAM_U57. Acceptată în Linux/x86_64.
Specify how to report the missing GNU_PROPERTY_X86_FEATURE_1_LAM_U48 property in input .note.gnu.property section. lam-u48-report=none, which is the default, will make the linker not report missing properties in input files. lam-u48-report=warning will make the linker issue a warning for missing properties in input files. lam-u48-report=error will make the linker issue an error for missing properties in input files. Supported for Linux/x86_64.
Specify how to report the missing GNU_PROPERTY_X86_FEATURE_1_LAM_U57 property in input .note.gnu.property section. lam-u57-report=none, which is the default, will make the linker not report missing properties in input files. lam-u57-report=warning will make the linker issue a warning for missing properties in input files. lam-u57-report=error will make the linker issue an error for missing properties in input files. Supported for Linux/x86_64.
Specify how to report the missing GNU_PROPERTY_X86_FEATURE_1_LAM_U48 and GNU_PROPERTY_X86_FEATURE_1_LAM_U57 properties in input .note.gnu.property section. lam-report=none, which is the default, will make the linker not report missing properties in input files. lam-report=warning will make the linker issue a warning for missing properties in input files. lam-report=error will make the linker issue an error for missing properties in input files. Supported for Linux/x86_64.
When generating an executable or shared library, mark it to tell the dynamic linker to defer function call resolution to the point when the function is called (lazy binding), rather than at load time. Lazy binding is the default.
Specifică ca filtrele obiectului să fie procesate imediat în timpul rulării.
Stabilește dimensiunea maximă a paginii de memorie acceptată la valoare.
Mark PLT entries with dynamic tags, DT_X86_64_PLT, DT_X86_64_PLTSZ and DT_X86_64_PLTENT. Since this option stores a non-zero value in the r_addend field of R_X86_64_JUMP_SLOT relocations, the resulting executables and shared libraries are incompatible with dynamic linkers, such as those in older versions of glibc without the change to ignore r_addend in R_X86_64_GLOB_DAT and R_X86_64_JUMP_SLOT relocations, which don't ignore the r_addend field of R_X86_64_JUMP_SLOT relocations. Supported for x86_64.
Permite definiții multiple.
Dezactivează variabilele .dynbss generate de către editorul de legături utilizate în locul variabilelor definite în bibliotecile partajate. Poate duce la realocări dinamice ale textului.
Specifică ca încărcătorul dinamic să ignore toate rutele implicite de căutare a bibliotecilor atunci când caută dependențele acestui obiect.
Specificați că obiectul nu trebuie descărcat în timpul rulării.
Specifică faptul că obiectul nu este disponibil pentru "dlopen".
Specifică faptul că obiectul nu poate fi descărcat (pentru afișare) de "dldump".
Marchează obiectul ca neavând nevoie de stivă executabilă.
Don't treat protected data symbols as external when building a shared library. This option overrides the linker backend default. It can be used to work around incorrect relocations against protected data symbols generated by compiler. Updates on protected data symbols by another module aren't visible to the resulting shared library. Supported for i386 and x86-64.
Dezactivează verificarea depășirii realocării. Aceasta poate fi utilizată pentru a dezactiva verificarea depășirii realocării dacă nu va exista o depășire dinamică a realocării la momentul rulării. Compatibil pentru x86_64.
Instruct the executable or shared library that the all PT_LOAD segments should be sealed to avoid further manipulation (such as changing the protection flags, the segment size, or remove the mapping). This is a security hardening that requires system support. This generates GNU_PROPERTY_MEMORY_SEAL in .note.gnu.property section
When generating an executable or shared library, mark it to tell the dynamic linker to resolve all symbols when the program is started, or when the shared library is loaded by dlopen, instead of deferring function call resolution to the point when the function is first called.
Specifică faptul că obiectul necesită gestionarea $ORIGIN în rute.
Generate compact relative relocation in position-independent executable and shared library. It adds "DT_RELR", "DT_RELRSZ" and "DT_RELRENT" entries to the dynamic section. It is ignored when building position-dependent executable and relocatable output. nopack-relative-relocs is the default, which disables compact relative relocation. When linked against the GNU C Library, a GLIBC_ABI_DT_RELR symbol version dependency on the shared C Library is added to the output. Supported for i386 and x86-64.
Create an ELF "PT_GNU_RELRO" segment header in the object. This specifies a memory segment that should be made read-only after relocation, if supported. Specifying common-page-size smaller than the system page size will render this protection ineffective. Don't create an ELF "PT_GNU_RELRO" segment if norelro.
Raportează realocările relative dinamice generate de editorul de legături. Este acceptat pentru Linux/i386 și Linux/x86_64.
Generează antetul secțiunii. Nu se generează antetul secțiunii dacă se utilizează nosectionheader. sectionheader este opțiunea implicită.
Create separate code "PT_LOAD" segment header in the object. This specifies a memory segment that should contain only instructions and must be in wholly disjoint pages from any other data. Don't create separate code "PT_LOAD" segment if noseparate-code is used.
Generează GNU_PROPERTY_X86_FEATURE_1_SHSTK în secțiunea .note.gnu.property pentru a indica compatibilitatea cu Intel Shadow Stack; pentru Linux/i386 și Linux/x86_64.
Specifică dimensiunea stivei pentru segmentul ELF "PT_GNU_STACK". Dacă se specifică valoarea zero, aceasta va suprascrie orice creare implicită a segmentului "PT_GNU_STACK" cu o dimensiune diferită de zero.
When --gc-sections is in effect, a reference from a retained section to "__start_SECNAME" or "__stop_SECNAME" causes all input sections named "SECNAME" to also be retained, if "SECNAME" is representable as a C identifier and either "__start_SECNAME" or "__stop_SECNAME" is synthesized by the linker. -z start-stop-gc disables this effect, allowing sections to be garbage collected as if the special synthesized symbols were not defined. -z start-stop-gc has no effect on a definition of "__start_SECNAME" or "__stop_SECNAME" in an object file or linker script. Such a definition will prevent the linker providing a synthesized "__start_SECNAME" or "__stop_SECNAME" respectively, and therefore the special treatment by garbage collection for those references.
Specify the ELF symbol visibility for synthesized "__start_SECNAME" and "__stop_SECNAME" symbols. value must be exactly default, internal, hidden, or protected. If no -z start-stop-visibility option is given, protected is used for compatibility with historical practice. However, it's highly recommended to use -z start-stop-visibility=hidden in new programs and shared libraries so that these symbols are not exported between shared objects, which is not usually what's intended.
Raportează o eroare dacă DT_TEXTREL este activat, adică dacă obiectul independent de poziție sau obiectul partajat conține realocări dinamice în secțiuni de tip „doar citire”. Nu raportează o eroare dacă notext sau textoff.
Nu raportează referințele la simboluri nerezolvate din fișiere obiect obișnuite, fie la crearea unui executabil, fie la crearea unei biblioteci partajate. Această opțiune este inversă față de -z defs.
Evitarea dublării numelor simbolurilor locale în tabelul șirurilor de simboluri. Adaugă „."number"” la numele simbolurilor locale duplicate dacă se utilizează unique-symbol. nounique-symbol este valoarea implicită.
Specify the x86-64 ISA level needed in .note.gnu.property section. x86-64-baseline generates "GNU_PROPERTY_X86_ISA_1_BASELINE". x86-64-v2 generates "GNU_PROPERTY_X86_ISA_1_V2". x86-64-v3 generates "GNU_PROPERTY_X86_ISA_1_V3". x86-64-v4 generates "GNU_PROPERTY_X86_ISA_1_V4". Supported for Linux/i386 and Linux/x86_64.
Specify how to report x86-64 ISA levels in input relocatable files. isa-level-report=none, which is the default, will make the linker not report x86-64 ISA levels in input files. isa-level-report=all will make the linker report needed and used x86-64 ISA levels in input files. isa-level-report=needed will make the linker report needed x86-64 ISA levels in input files. isa-level-report=used will make the linker report used x86-64 ISA levels in input files. Supported for Linux/i386 and Linux/x86_64.

Alte cuvinte-cheie sunt ignorate pentru compatibilitate cu Solaris.

Add "GLIBC_ABI_GNU_TLS" version tag dependency in output programs and shared libraries when linking against glibc if input relocatable object files call "___tls_get_addr". The output will fail to load and run at run-time against glibc which doesn't define the "GLIBC_ABI_GNU_TLS" version tag. Unless disabled by the --disable-gnu-tls-tag configure option at the linker build time, when no options are specified, linker will add the "GLIBC_ABI_GNU_TLS" version tag dependency if inputs have "___tls_get_addr" call and libc.so defines the "GLIBC_ABI_GNU_TLS" version tag. Supported for Linux/i386.
Add "GLIBC_ABI_GNU2_TLS" version tag dependency in output programs and shared libraries when linking against glibc if input relocatable object files have "R_386_TLS_DESC_CALL" or "R_X86_64_TLSDESC_CALL" relocation. The output will fail to load and run at run-time against glibc which doesn't define the "GLIBC_ABI_GNU2_TLS" version tag. Unless disabled by the --disable-gnu2-tls-tag configure option at the linker build time, when no options are specified, linker will add the "GLIBC_ABI_GNU2_TLS" version tag dependency if inputs have "R_386_TLS_DESC_CALL" or "R_X86_64_TLSDESC_CALL" relocation and libc.so defines the "GLIBC_ABI_GNU2_TLS" version tag. Supported for Linux/i386 and Linux/x86_64.
-( arhive -)
arhive trebuie să fie o listă de fișiere de arhivă. Acestea pot fi fie nume explicite de fișiere, fie opțiuni -l.

The specified archives are searched repeatedly until no new undefined references are created. Normally, an archive is searched only once in the order that it is specified on the command line. If a symbol in that archive is needed to resolve an undefined symbol referred to by an object in an archive that appears later on the command line, the linker would not be able to resolve that reference. By grouping the archives, they will all be searched repeatedly until all possible references are resolved.

Utilizarea acestei opțiuni are un impact semnificativ asupra performanței. Este recomandat să o folosiți doar atunci când există referințe circulare inevitabile între două sau mai multe arhive.

Tells the linker to accept input files whose architecture cannot be recognised. The assumption is that the user knows what they are doing and deliberately wants to link in these unknown input files. This was the default behaviour of the linker, before release 2.14. The default behaviour from release 2.14 onwards is to reject such input files, and so the --accept-unknown-input-arch option has been added to restore the old behaviour.
This option affects ELF DT_NEEDED tags for dynamic libraries mentioned on the command line after the --as-needed option. Normally the linker will add a DT_NEEDED tag for each dynamic library mentioned on the command line, regardless of whether the library is actually needed or not. --as-needed causes a DT_NEEDED tag to only be emitted for a library that at that point in the link satisfies a non-weak undefined symbol reference from a regular object file or, if the library is not found in the DT_NEEDED lists of other needed libraries, a non-weak undefined symbol reference from another needed dynamic library. Object files or libraries appearing on the command line after the library in question do not affect whether the library is seen as needed. This is similar to the rules for extraction of object files from archives. --no-as-needed restores the default behaviour.

Notă: În sistemele bazate pe Linux, opțiunea --as-neededed are, de asemenea, un efect asupra comportamentului opțiunilor --rpath și --rpath-link. Pentru mai multe detalii, consultați descrierea opțiunii --rpath-link.

Aceste două opțiuni au fost depreciate din cauza similitudinii numelor lor cu opțiunile --as-needed și --no-as-needed. Ele au fost înlocuite de --copy-dt-needed-entries și --no-copy-dt-needed-entries.
Această opțiune este ignorată pentru compatibilitate cu SunOS.
Link against dynamic libraries. This is only meaningful on platforms for which shared libraries are supported. This option is normally the default on such platforms. The different variants of this option are for compatibility with various systems. You may use this option multiple times on the command line: it affects library searching for -l options which follow it.
Set the "DF_1_GROUP" flag in the "DT_FLAGS_1" entry in the dynamic section. This causes the runtime linker to handle lookups in this object and its dependencies to be performed only inside the group. --unresolved-symbols=report-all is implied. This option is only meaningful on ELF platforms which support shared libraries.
Do not link against shared libraries. This is only meaningful on platforms for which shared libraries are supported. The different variants of this option are for compatibility with various systems. You may use this option multiple times on the command line: it affects library searching for -l options which follow it. This option also implies --unresolved-symbols=report-all. This option can be used with -shared. Doing so means that a shared library is being created but that all of the library's external references must be resolved by pulling in entries from static libraries.
When creating a shared library, bind references to global symbols to the definition within the shared library, if any. Normally, it is possible for a program linked against a shared library to override the definition within the shared library. This option is only meaningful on ELF platforms which support shared libraries.
When creating a shared library, bind references to global function symbols to the definition within the shared library, if any. This option is only meaningful on ELF platforms which support shared libraries.
Această opțiune poate anula opțiunile -Bsymbolic și -Bsymbolic-functions specificate anterior.
Specify the name of a dynamic list file to the linker. This is typically used when creating shared libraries to specify a list of global symbols whose references shouldn't be bound to the definition within the shared library, or creating dynamically linked executables to specify a list of symbols which should be added to the symbol table in the executable. This option is only meaningful on ELF platforms which support shared libraries.

Formatul listei dinamice este identic cu cel al nodului de versiune, fără domeniul de aplicare și numele nodului. Pentru mai multe informații, consultați VERSION.

Include toate simbolurile de date globale în lista dinamică.
Furnizează lista dinamică integrată pentru operatorii C++ „new” și „delete”. Aceasta este utilă în special pentru compilarea bibliotecii libstdc++ partajate.
Furnizează lista dinamică integrată pentru identificarea tipurilor în timpul rulării în C++.
Solicită editorului de legături să nu verifice adresele secțiunilor după ce acestea au fost alocate pentru a vedea dacă există suprapuneri. În mod normal, editorul de legături va efectua această verificare și, dacă găsește suprapuneri, va produce mesaje de eroare corespunzătoare. Editorul de legături are cunoștință și ține cont de secțiunile care se suprapun. Comportamentul implicit poate fi restabilit prin utilizarea opțiunii din linia de comandă --check-sections. De obicei, suprapunerea secțiunilor nu este verificată pentru legăturile realocabile. Puteți forța verificarea în acest caz folosind opțiunea --check-sections.
This option affects the treatment of dynamic libraries referred to by DT_NEEDED tags inside ELF dynamic libraries mentioned on the command line. Normally the linker won't add a DT_NEEDED tag to the output binary for each library mentioned in a DT_NEEDED tag in an input dynamic library. With --copy-dt-needed-entries specified on the command line however any dynamic libraries that follow it will have their DT_NEEDED entries added. The default behaviour can be restored with --no-copy-dt-needed-entries.

This option also has an effect on the resolution of symbols in dynamic libraries. With --copy-dt-needed-entries dynamic libraries mentioned on the command line will be recursively searched, following their DT_NEEDED tags to other libraries, in order to resolve symbols required by the output binary. With the default setting however the searching of dynamic libraries that follow it will stop with the dynamic library itself. No DT_NEEDED links will be traversed to resolve symbols.

Generează un tabel de referințe încrucișate. Dacă se generează un fișier de hartă pentru editorul de legături, tabelul de referințe încrucișate este inclus în fișierul de hartă. În caz contrar, acesta este afișat la ieșirea standard.

The format of the table is intentionally simple, so that it may be easily processed by a script if necessary. The symbols are printed out, sorted by name. For each symbol, a list of file names is given. If the symbol is defined, the first file listed is the location of the definition. If the symbol is defined as a common value then any files where this happens appear next. Finally any files that reference the symbol are listed.

The CTF debuginfo format supports a section which encodes the names and types of variables found in the program which do not appear in any symbol table. These variables clearly cannot be looked up by address by conventional debuggers, so the space used for their types and names is usually wasted: the types are usually small but the names are often not. --ctf-variables causes the generation of such a section. The default behaviour can be restored with --no-ctf-variables.
Ajustează metoda utilizată pentru partajarea tipurilor între unitățile de conversie în CTF.
Pune toate tipurile care nu au definiții ambigue în dicționarul comun, unde programele de depanare le pot accesa cu ușurință, chiar dacă acestea apar doar într-o singură unitate de traducere. Aceasta este opțiunea implicită.
Put only types that occur in multiple translation units into the shared dictionary: types with only one definition go into per-translation-unit dictionaries. Types with ambiguous definitions in multiple translation units always go into per-translation-unit dictionaries. This tends to make the CTF larger, but may reduce the amount of CTF in the shared dictionary. For very large projects this may speed up opening the CTF and save memory in the CTF consumer at runtime.
Această opțiune împiedică alocarea de adrese simbolurilor comune. Comanda de script "INHIBIT_COMMON_ALLOCATION" are același efect.

The --no-define-common option allows decoupling the decision to assign addresses to Common symbols from the choice of the output file type; otherwise a non-Relocatable output type forces assigning addresses to Common symbols. Using --no-define-common allows Common symbols that are referenced from a shared library to be assigned addresses only in the main program. This eliminates the unused duplicate space in the shared library, and also prevents any possible confusion over resolving to the wrong duplicate when there are many dynamic modules with specialized search paths for runtime symbol resolution.

This option causes the linker to place section group members like normal input sections, and to delete the section groups. This is the default behaviour for a final link but this option can be used to change the behaviour of a relocatable link (-r). The script command "FORCE_GROUP_ALLOCATION" has the same effect.
Creează un simbol global în fișierul de ieșire, conținând adresa absolută dată de expresie. Puteți utiliza această opțiune de câte ori este necesar pentru a defini mai multe simboluri în linia de comandă. O formă limitată de aritmetică este acceptată pentru expresia în acest context: puteți da o constantă hexazecimală sau numele unui simbol existent, sau puteți utiliza "+" și "-" pentru a adăuga sau a scădea constante hexazecimale sau simboluri. Dacă aveți nevoie de expresii mai elaborate, luați în considerare utilizarea limbajului de comandă pentru editorul de legături dintr-un script. Notă: nu trebuie să existe spațiu alb între simbol, semnul egal („=”) și expresie.

The linker processes --defsym arguments and -T arguments in order, placing --defsym before -T will define the symbol before the linker script from -T is processed, while placing --defsym after -T will define the symbol after the linker script has been processed. This difference has consequences for expressions within the linker script that use the --defsym symbols, which order is correct will depend on what you are trying to achieve.

These options control whether to demangle symbol names in error messages and other output. When the linker is told to demangle, it tries to present symbol names in a readable fashion: it strips leading underscores if they are used by the object file format, and converts C++ mangled symbol names into user readable names. Different compilers have different mangling styles. The optional demangling style argument can be used to choose an appropriate demangling style for your compiler. The linker will demangle by default unless the environment variable COLLECT_NO_DEMANGLE is set. These options may be used to override the default.
Stabilește numele editorului de legături dinamice. Această opțiune are sens doar atunci când se generează executabile ELF cu legături dinamice. Editorul de legături dinamice implicit este, de obicei, cel potrivit; nu folosi această opțiune decât dacă știi exact ce faci.
When producing an executable file, omit the request for a dynamic linker to be used at load-time. This is only meaningful for ELF executables that contain dynamic relocations, and usually requires entry point code that is capable of processing these relocations.
Această opțiune este similară cu opțiunea --emit-relocs, cu excepția faptului că realocările sunt stocate într-o secțiune specifică destinației. Această opțiune este acceptată doar de țintele BFIN, CR16 și M68K.
Nu permite definiții multiple cu simboluri incluse în numele fișierului invocat de „-R” sau „--just-symbols”
Tratează toate avertismentele ca erori. Comportamentul implicit poate fi restabilit cu opțiunea --no-fatal-warnings.
Nu afișează niciun mesaj de avertizare sau eroare. Această opțiune prevalează asupra opțiunii --fatal-warnings dacă aceasta a fost activată. Această opțiune poate fi utilizată atunci când se știe că binarul de ieșire nu va funcționa, dar este totuși necesar să fie creat.
Se asigură că un fișier de ieșire are un sufix .exe.

If a successfully built fully linked output file does not have a ".exe" or ".dll" suffix, this option forces the linker to copy the output file to one of the same name with a ".exe" suffix. This option is useful when using unmodified Unix makefiles on a Microsoft Windows host, since some versions of Windows won't run an image unless it ends in a ".exe" suffix.

Activează colectarea gunoiului din secțiunile de intrare neutilizate. Este ignorată pe țintele care nu acceptă această opțiune. Comportamentul implicit (de a nu efectua această colectare a gunoiului) poate fi restabilit prin specificarea --no-gc-sections în linia de comandă. Rețineți că colectarea gunoiului pentru obiectivele în format COFF și PE este acceptată, dar implementarea este considerată în prezent experimentală.

--gc-sections decides which input sections are used by examining symbols and relocations. The section containing the entry symbol and all sections containing symbols undefined on the command-line will be kept, as will sections containing symbols referenced by dynamic objects. Note that when building shared libraries, the linker must assume that any visible symbol is referenced. Once this initial set of sections has been determined, the linker recursively marks as used any section referenced by their relocations. See --entry, --undefined, and --gc-keep-exported.

This option can be set when doing a partial link (enabled with option -r). In this case the root of symbols kept must be explicitly specified either by one of the options --entry, --undefined, or --gc-keep-exported or by a "ENTRY" command in the linker script.

Ca o extensie GNU, secțiunile de intrare ELF marcate cu fanionul "SHF_GNU_RETAIN" nu vor fi colectate la gunoi.

Listează toate secțiunile eliminate prin colectarea gunoiului. Lista este afișată la ieșirea de eroare standard. Această opțiune este eficientă numai dacă colectarea gunoiului a fost activată prin intermediul opțiunii --gc-sections. Comportamentul implicit (de a nu lista secțiunile care sunt eliminate) poate fi restabilit prin specificarea --no-print-gc-sections în linia de comandă.
When --gc-sections is enabled, this option prevents garbage collection of unused input sections that contain global symbols having default or protected visibility. This option is intended to be used for executables where unreferenced sections would otherwise be garbage collected regardless of the external visibility of contained symbols. Note that this option has no effect when linking shared objects since it is already the default behaviour. This option is only supported for ELF format targets.
Afișează numele formatului de ieșire implicit (care poate fi influențat de alte opțiuni ale liniei de comandă). Acesta este șirul care ar apărea într-o comandă de tipul "OUTPUT_FORMAT" din scriptul editorului de legături.
Print used size, total size and used size of memory regions created with the MEMORY command. This is useful on embedded targets to have a quick view of amount of free memory. The format of the output has one headline and one line per region. It is both human readable and easily parsable by tools. Here is an example of an output:

  Regiunea de memorie    Dim. utilizată Dim. regiune  Utiliz. %
                     ROM:        256 KB         1 MB     25.00%
                     RAM:          32 B         2 GB      0.00%
    

Notă: dacă doriți să aflați informații despre utilizarea memoriei de către editorul de legături, puteți folosi opțiunea --stats.

Afișează un rezumat al opțiunilor liniei de comandă la ieșirea standard și apoi iese.
Afișează un rezumat al tuturor opțiunilor specifice țintei la ieșirea standard și apoi iese.
Imprimă o hartă de legături către fișierul fișier-hartă. Consultați descrierea opțiunii -M de mai sus. Dacă fișier-hartă este doar caracterul „-”, atunci harta va fi scrisă la ieșirea standard.

Specifying a directory as mapfile causes the linker map to be written as a file inside the directory. Normally name of the file inside the directory is computed as the basename of the output file with ".map" appended. If however the special character "%" is used then this will be replaced by the full path of the output file. Additionally if there are any characters after the % symbol then ".map" will no longer be appended.

         -o foo.exe -Map=bar                  [Creates ./bar]
         -o ../dir/foo.exe -Map=bar           [Creates ./bar]
         -o foo.exe -Map=../dir               [Creates ../dir/foo.exe.map]
         -o ../dir2/foo.exe -Map=../dir       [Creează ../dir/foo.exe.map]
         -o foo.exe -Map=%                    [Creează ./foo.exe.map]
         -o ../dir/foo.exe -Map=%             [Creează ../dir/foo.exe.map]
         -o foo.exe -Map=%.bar                [Creează ./foo.exe.bar]
         -o ../dir/foo.exe -Map=%.bar         [Creează ../dir/foo.exe.bar]
         -o ../dir2/foo.exe -Map=../dir/%     [Creează ../dir/../dir2/foo.exe.map]
         -o ../dir2/foo.exe -Map=../dir/%.bar [Creează ../dir/../dir2/foo.exe.bar]
    

Este o eroare dacă se specifică mai mult de un caracter „%”.

Dacă fișierul-hartă există deja, acesta va fi suprascris în urma acestei operații.

ld normally optimizes for speed over memory usage by caching the symbol tables of input files in memory. This option tells ld to instead optimize for memory usage, by rereading the symbol tables as necessary. This may be required if ld runs out of memory space while linking a large executable.
Report unresolved symbol references from regular object files. This is done even if the linker is creating a non-symbolic shared library. The switch --[no-]allow-shlib-undefined controls the behaviour for reporting unresolved references found in shared libraries being linked in.

Efectele acestei opțiuni pot fi inversate folosind "-z undefs").

În mod normal, atunci când un simbol este definit de mai multe ori, editorul de legături va raporta o eroare fatală. Aceste opțiuni permit definiții multiple, iar prima definiție va fi utilizată.
Permite sau nu permite simboluri nedefinite în bibliotecile partajate. Această opțiune este similară cu --no-undefined, cu excepția faptului că determină comportamentul în cazul în care simbolurile nedefinite se află într-o bibliotecă partajată și nu într-un fișier obiect obișnuit. Nu afectează modul în care sunt tratate simbolurile nedefinite din fișierele de obiecte obișnuite.

The default behaviour is to report errors for any undefined symbols referenced in shared libraries if the linker is being used to create an executable, but to allow them if the linker is being used to create a shared library.

Motivele pentru care se permit referințele la simboluri nedefinite în bibliotecile partajate specificate în momentul legării sunt următoarele:

  • Este posibil ca o bibliotecă partajată specificată în momentul vinculării să nu fie aceeași cu cea care este disponibilă în momentul încărcării, astfel încât simbolul ar putea fi de fapt rezolvabil în momentul încărcării.
  • Există unele sisteme de operare, cum ar fi BeOS și HPPA, în care prezența simbolurilor nedefinite în bibliotecile partajate este ceva normal.

    The BeOS kernel for example patches shared libraries at load time to select whichever function is most appropriate for the current architecture. This is used, for example, to dynamically select an appropriate memset function.

If this option is provided then the linker will invoke scriptname whenever an error is encountered. Currently however only two kinds of error are supported: missing symbols and missing libraries. Two arguments will be passed to script: the keyword "undefined-symbol" or `missing-lib" and the name of the undefined symbol or missing library. The intention is that the script will provide suggestions to the user as to where the symbol or library might be found. After the script has finished then the normal linker error message will be displayed.

Disponibilitatea acestei opțiuni este controlată de un comutator de configurare a timpului, astfel încât este posibil să nu fie prezentă în anumite implementări.

În mod normal, atunci când un simbol are o versiune nedefinită, editorul de legături îl va ignora. Această opțiune nu permite simbolurile cu versiune nedefinită și, în schimb, va fi emisă o eroare fatală.
Creează și utilizează o versiune implicită a simbolului (soname) pentru simbolurile exportate fără versiune.
Creează și utilizează o versiune implicită a simbolului (soname) pentru simbolurile importate fără versiune.
Normally ld will give an error if you try to link together input files that are mismatched for some reason, perhaps because they have been compiled for different processors or for different endiannesses. This option tells ld that it should silently permit such possible errors. This option should only be used with care, in cases when you have taken some special action that ensures that the linker errors are inappropriate.
În mod normal, ld va da un avertisment dacă găsește o bibliotecă incompatibilă în timpul căutării bibliotecii. Această opțiune silențiază avertismentul.
Dezactivează efectul opțiunii --whole-archive pentru fișierele de arhivă ulterioare.
Retain the executable output file whenever it is still usable. Normally, the linker will not produce an output file if it encounters errors during the link process; it exits without writing an output file when it issues any error whatsoever.
Caută numai în directoarele de biblioteci specificate în mod explicit în linia de comandă. Directoarele de biblioteci specificate în scripturile editorului de legături (inclusiv cele specificate în linia de comandă) sunt ignorate.
ld may be configured to support more than one kind of object file. If your ld is configured this way, you can use the --oformat option to specify the binary format for the output object file. Even when ld is configured to support alternative object formats, you don't usually need to specify this, as ld should be configured to produce as a default output format the most usual format on each machine. output-format is a text string, the name of a particular format supported by the BFD libraries. (You can list the available binary formats with objdump -i.) The script command "OUTPUT_FORMAT" can also specify the output format, but this option overrides it.
Creează o bibliotecă de import în fișier corespunzătoare executabilului generat de editorul de legături (de exemplu, un program DLL sau ELF). Această bibliotecă de import (care ar trebui să se numească "*.dll.a" sau "*.a" pentru DLL-uri) poate fi utilizată pentru vincularea clienților cu executabilul generat; acest comportament face posibilă omiterea unei etape separate de creare a bibliotecii de import (de exemplu, "dlltool" pentru DLL-uri). Această opțiune este disponibilă numai pentru adaptările vizate i386 PE și ELF ale editorului de legături.
Creează un executabil independent de poziție. Acest lucru este acceptat în prezent numai pe platformele ELF. Executabilele independente de poziție sunt realocate de către editorul de legături dinamice la adresa virtuală aleasă de sistemul de operare pentru acestea, care poate varia de la o invocare la alta. Ele sunt marcate ET_DYN în antetul fișierului ELF, dar diferă de bibliotecile partajate în mai multe moduri. În special, simbolurile definite în mod implicit într-un PIE nu pot fi înlocuite de un alt obiect, așa cum se poate întâmpla într-o bibliotecă partajată.
Creează un executabil dependent de poziție. Aceasta este opțiunea implicită.
Această opțiune este ignorată pentru compatibilitate cu Linux.
Această opțiune este ignorată pentru compatibilitate cu SVR4.
O opțiune cu efecte dependente de mașină. Această opțiune este suportată doar pe câteva obiective-țintă.

On some platforms the --relax option performs target specific, global optimizations that become possible when the linker resolves addressing in the program, such as relaxing address modes, synthesizing new instructions, selecting shorter version of current instructions, and combining constant values.

On some platforms these link time global optimizations may make symbolic debugging of the resulting executable impossible. This is known to be the case for the Matsushita MN10200 and MN10300 family of processors.

Pe platformele care acceptă această caracteristică, opțiunea --no-relax o va dezactiva.

Pe platformele care nu acceptă această caracteristică, atât --relax, cât și --no-relax sunt acceptate, dar ignorate.

Retain only the symbols listed in the file filename, discarding all others. filename is simply a flat file, with one symbol name per line. This option is especially useful in environments (such as VxWorks) where a large global symbol table is accumulated gradually, to conserve run-time memory.

--retain-symbols-file nu elimină simbolurile nedefinite sau simbolurile necesare pentru realocări.

Puteți specifica --retain-symbols-file doar o singură dată în linia de comandă. Aceasta prevalează asupra lui -s și -S.

Adaugă un director la ruta de căutare a bibliotecii de execuție. Acest lucru este utilizat atunci când se leagă un executabil ELF cu obiecte partajate. Toate argumentele -rpath sunt concatenate și transmise editorului de legături în timp de execuție, care le utilizează pentru a localiza obiectele partajate în timpul execuției.

The -rpath option is also used when locating shared objects which are needed by shared objects explicitly included in the link; see the description of the -rpath-link option. Searching -rpath in this way is only supported by native linkers and cross linkers which have been configured with the --with-sysroot option.

Dacă opțiunea -rpath nu este utilizată la legarea unui executabil ELF, se va folosi conținutul variabilei de mediu "LD_RUN_PATH", dacă aceasta este definită.

The -rpath option may also be used on SunOS. By default, on SunOS, the linker will form a runtime search path out of all the -L options it is given. If a -rpath option is used, the runtime search path will be formed exclusively using the -rpath options, ignoring the -L options. This can be useful when using gcc, which adds many -L options which may be on NFS mounted file systems.

Pentru compatibilitate cu alți editori de legături ELF, dacă opțiunea -R este urmată de un nume de director, în loc de un nume de fișier, aceasta este tratată ca opțiunea -rpath.

Atunci când se utilizează ELF sau SunOS, o bibliotecă partajată poate necesita o altă bibliotecă. Acest lucru se întâmplă atunci când o legătură "ld -shared" include o bibliotecă partajată printre fișierele de intrare.

When the linker encounters such a dependency when doing a non-shared, non-relocatable link, it will automatically try to locate the required shared library and include it in the link, if it is not included explicitly. In such a case, several directories are searched as described below. The -rpath-link option specifies the first set of directories to search. This option may specify a sequence of directory names either by providing a list of names separated by colons, or by appearing multiple times.

The tokens $ORIGIN and $LIB can appear in these search directories. They will be replaced by the full path to the directory containing the program or shared object in the case of $ORIGIN and either lib - for 32-bit binaries - or lib64 - for 64-bit binaries - in the case of $LIB.

Forma alternativă a acestor jetoane - ${ORIGIN} și ${LIB} - poate fi, de asemenea, utilizată. Jetoanele $PLATFORM nu sunt acceptate.

The --rpath-link option should be used with caution as it overrides the search path that may have been hard compiled into a shared library. In such a case it is possible to unintentionally use a different search path than the runtime linker would have used.

When additional shared libraries are required, the linker will search directories in the order listed below in order to find them. Note however that this only applies to additional libraries needed to satisfy already included shared libraries. It does not apply to libraries that are included via the -l command line option. Searches for -l libraries are only conducted in directories specified by the -L option.

1.
Orice directoare specificate prin opțiunile -rpath-link.
2.
Orice directoare specificate prin opțiunile -rpath. Diferența dintre -rpath și -rpath-link constă în faptul că directoarele specificate prin opțiunile -rpath sunt incluse în executabil și utilizate în timpul execuției, în timp ce opțiunea -rpath-link este eficientă numai în timpul vinculării. Căutarea -rpath în acest mod este acceptată numai de către editorii de legături nativi și de editorii de legături încrucișate care au fost configurați cu opțiunea --with-sysroot.
3.
Pe un sistem ELF, în cazul editorilor de legături nativi, dacă opțiunile -rpath și -rpath-link nu au fost utilizate, se caută în conținutul variabilei de mediu "LD_RUN_PATH".
4.
Pe SunOS, dacă nu a fost utilizată opțiunea -rpath, se caută în toate directoarele specificate cu ajutorul opțiunilor -L.
5.
Pentru un editor de legături nativ, caută conținutul variabilei de mediu "LD_LIBRARY_PATH".
6.
Pentru un editor de legături ELF nativ, directoarele din "DT_RUNPATH" sau "DT_RPATH" ale unei biblioteci partajate sunt căutate pentru bibliotecile partajate necesare acesteia. Intrările "DT_RPATH" sunt ignorate dacă există intrări "DT_RUNPATH".
7.
Pentru un editor de legături pentru un sistem Linux, dacă fișierul /etc/ld.so.conf există, listează directoarele găsite în acel fișier. Notă: ruta către acest fișier este prefixată cu valoarea "sysroot", dacă aceasta este definită, și apoi cu orice șir "prefix", dacă editorul de legături a fost configurat cu opțiunea --prefix=<ruta>.
8.
Pentru un editor de legături nativ pe un sistem FreeBSD, orice directoare specificate de macrocomanda "_PATH_ELF_HINTS" definită în fișierul antet elf-hints.h.
9.
Orice directoare specificate de o comandă "SEARCH_DIR" într-un script de editare de legături dat în linia de comandă, inclusiv scripturile specificate de -T (dar nu și de -dT).
10.
Directoarele implicite, în mod normal /lib și /usr/lib.
11.
Orice directoare specificate de un modul LDPT_SET_EXTRA_LIBRARY_PATH.
12.
Orice directoare specificate de o comandă "SEARCH_DIR" într-un script de editare de legături implicit.

Note however on Linux based systems there is an additional caveat: If the --as-needed option is active and a shared library is located which would normally satisfy the search and this library does not have DT_NEEDED tag for libc.so and there is a shared library later on in the set of search directories which also satisfies the search and this second shared library does have a DT_NEEDED tag for libc.so then the second library will be selected instead of the first.

Dacă biblioteca partajată necesară nu este găsită, editorul de legături va emite un avertisment și va continua procesul de legare.

This option is used to augment the current linker script with additional mapping of input sections to output sections. This file must use the same syntax for "SECTIONS" as is used in normal linker scripts, but it should not do anything other than place input sections into output sections. @pxref{SECTIONS}

O a doua constrângere asupra scriptului de ordonare a secțiunilor este că acesta poate face referire numai la secțiunile de ieșire care sunt deja definite de scriptul editorului de legături utilizat în prezent; (de exemplu, scriptul editorului de legături implicit sau un script specificat în linia de comandă). Cu toate acestea, avantajul scriptului de ordonare a secțiunilor este că secțiunile de intrare sunt puse la începutul secțiunilor de ieșire, astfel încât să poată asigura ordonarea secțiunilor în secțiunea de ieșire. De exemplu, imaginați-vă că scriptul editorului de legături implicit arată astfel:

        SECTIONS {
          .text : { *(.text.hot) ; *(.text .text.*) }
          .data : { *(.data.big) ; *(.data .data.*) }
          }
    

Atunci, dacă se utilizează un fișier de ordonare a secțiunilor precum acesta:

          .text : { *(.text.first) ; *(.text.z*) }
          .data : { foo.o(.data.first) ; *(.data.small) }
    

Acesta ar echivala cu un script de editor de legături precum acesta:

        SECTIONS {
          .text : { *(.text.first) ; *(.text.z*) ; *(.text.hot) ; *(.text .text.*) }
          .data : { foo.o(.data.first) ; *(.data.small) ; *(.data.big) ; *(.data .data.*) }
          }
    

Avantajul fișierului de ordonare a secțiunilor este că poate fi folosit pentru a ordona secțiunile care prezintă interes pentru utilizator, fără a fi nevoie să se țină cont de alte secțiuni, de regiuni de memorie sau de orice alt aspect.

Creează o bibliotecă partajată. Acest lucru este acceptat în prezent numai pe platformele ELF, XCOFF și SunOS. Pe SunOS, editorul va crea automat o bibliotecă partajată dacă opțiunea -e nu este utilizată și există simboluri nedefinite în legătură.
This option tells ld to sort the common symbols by alignment in ascending or descending order when it places them in the appropriate output sections. The symbol alignments considered are sixteen-byte or larger, eight-byte, four-byte, two-byte, and one-byte. This is to prevent gaps between symbols due to alignment constraints. If no sorting order is specified, then descending order is assumed.
Această opțiune va aplica "SORT_BY_NAME" tuturor modelelor de secțiuni cu caractere joker din scriptul editorului de legături.
Această opțiune va aplica "SORT_BY_ALIGNMENT" tuturor modelelor de secțiuni cu caractere joker din scriptul editorului de legături.
Această opțiune specifică numărul de sloturi goale care trebuie lăsate în secțiunea .dynamic a obiectelor partajate ELF. Sloturile goale pot fi necesare pentru instrumentele de post-procesare, cum ar fi pre-editorul de legături. Valoarea implicită este 5.
Similară cu --split-by-reloc, dar creează o nouă secțiune de ieșire pentru fiecare fișier de intrare atunci când se atinge valoarea dimensiunea. Dacă nu este specificată, valoarea implicită pentru dimensiunea este 1.
Tries to creates extra sections in the output file so that no single output section in the file contains more than count relocations. This is useful when generating huge relocatable files for downloading into certain real time kernels with the COFF object file format; since COFF cannot represent more than 65535 relocations in a single section. Note that this will fail to work with object file formats which do not support arbitrary sections. The linker will not split up individual input sections for redistribution, so if a single input section contains more than count relocations one output section will contain that many relocations. count defaults to a value of 32768.
Calculează și afișează statistici despre funcționarea editorului de legături, cum ar fi timpul de execuție și utilizarea memoriei.

If the optional filename argument is not supplied then only basic information is reported, and it is sent to the standard error output stream. If the filename argument is supplied then extended information is written to the named file. If filename is set to just the - symbol, then the extended information is sent to the standard output stream. If the filename starts with + then the file is opened in append mode rather than overwrite mode.

If the -Map option has been enabled then the information is also recorded in the map file as well. Note: if both the --stats option and the -Map options have been given filename arguments and they match, then the information will only be written out once not twice.

If the "LD_STATS" environment variable is defined then this behaves likes the --stats option. If the variable's value is a string then this will used as the name of a file into which the information should be recorded. Otherwise the information will be sent to the standard output stream. Using the environment variable allows stats to be recorded without having to alter the linker's command line. Note: if both the environment variable and the --stats option are used then the --stats option takes precedence.

The extended information reported includes the cpu time used and, if the getrusage() system library call is available then maximum set size and the user and system run times as well. In addition if the mallinfo or mallinfo2 system library calls are available then the total memory usage is reported,

The information is displayed for individual parts of the linking process which are referred to as phases. Note that individual phases can contain or overlap with each other so it should not be assumed that the overall resources used by the linker is the sum of the resources used by the individual phases.

În plus, informațiile sunt prezentate și pentru o fază specială denumită ALL, care acoperă întregul proces de legare.

When extended information is being reported the linker version, command line arguments and linker start time are also included. This makes it easier to handle the situation where multiple links are being invoked by a build system and to indentify exactly which arguments were responsible for producing the statistics that are reported.

Ieșirea extinsă arată cam așa:

        Stats: linker version: (GNU Binutils) 2.44.50.20250401
        Stats: linker started: Wed Apr  2 09:36:41 2025
        Stats: args: ld -z norelro -z nomemory-seal -z no-separate-code -o a.out [...]
       
        Stats: phase               cpu time       rss      user time    system time     memory
        Stats: name                (microsec)   (KiB)      (seconds)      (seconds)      (KiB)
        Stats: ALL                   390082    217740              0              0   25219440
        Stats: ctf processing            12         0              0              0          0
        Stats: string merge            1324         0              0              0     406544
        Stats: parsing                  349       288              0              0     119792
        Stats: plugins                    1         0              0              0          0
        Stats: processing files      259616    214524              0              0   31569120
        Stats: write                 116493         0              0              0      48096
    
Dezactivează raportarea statisticilor de utilizare, în cazul în care aceasta a fost activată prin opțiunea de linie de comandă --stats sau prin variabila de mediu LD_STATS.
Utilizează director ca locație pentru sysroot, suprascriind valoarea implicită stabilită în timpul configurării. Această opțiune este acceptată doar de editorii de legături care au fost configurați folosind opțiunea --with-sysroot.
Această opțiune este utilizată de țintele bazate pe COFF/PE pentru a crea un fișier obiect legat de sarcină în care toate simbolurile globale au fost convertite în simboluri statice.
Pentru unele ținte, rezultatul ld este diferit în anumite moduri de rezultatul unui editor de legături existent. Această opțiune solicită ld să utilizeze în schimb formatul tradițional.

For example, on SunOS, ld combines duplicate entries in the symbol string table. This can reduce the size of an output file with full debugging information by over 30 percent. Unfortunately, the SunOS "dbx" program can not read the resulting program ("gdb" has no trouble). The --traditional-format switch tells ld to not combine duplicate entries.

Locate a section in the output file at the absolute address given by org. You may use this option as many times as necessary to locate multiple sections in the command line. org must be a single hexadecimal integer; for compatibility with other linkers, you may omit the leading 0x usually associated with hexadecimal values. Note: there should be no white space between sectionname, the equals sign ("="), and org.
Atunci când se utilizează ELF, la fel ca în cazul -Ttext-segment, ambele opțiuni stabilesc efectiv adresa de bază a executabilului ELF.

Când se utilizează PE, utilizează valoarea ca adresă de bază a programului sau dll-ului. Aceasta este cea mai mică locație de memorie care va fi utilizată atunci când programul sau dll-ul dvs. este încărcat. Pentru a reduce nevoia de realocare și pentru a îmbunătăți performanța dll-urilor dvs., fiecare ar trebui să aibă o adresă de bază unică și să nu se suprapună peste alte dll-uri. Valoarea implicită este 0x400000 pentru executabile și 0x10000000 pentru dll-uri.

La fel ca --section-start, cu ".bss", ".data" sau ".text" ca nume-secțiune.
When creating an ELF executable, it will set the address of the first byte of the first segment. Note that when -pie is used with -Ttext-segment=org, the output executable is marked ET_EXEC so that the address of the first byte of the text segment will be guaranteed to be org at run time.
When creating an ELF executable or shared object for a target where the read-only data is in its own segment separate from the executable text, it will set the address of the first byte of the read-only data segment.
Atunci când se creează un fișier executabil ELF sau un obiect partajat pentru modelul de memorie mediu x86-64, se va stabili adresa primului octet al segmentului ldata.
Determină modul de tratare a simbolurilor nerezolvate. Există patru valori posibile pentru metodă:
Nu raportează niciun simbol nerezolvat.
Raportează toate simbolurile nerezolvate. Aceasta este valoarea implicită.
Raportează simbolurile nerezolvate conținute în bibliotecile partajate, dar le ignoră dacă provin din fișiere obiect obișnuite.
Report unresolved symbols that come from regular object files, but ignore them if they come from shared libraries. This can be useful when creating a dynamic binary and it is known that all the shared libraries that it should be referencing are included on the linker's command line.

Comportamentul bibliotecilor partajate poate fi controlat și prin opțiunea --[no-]allow-shlib-undefined.

În mod normal, editorul de legături va genera un mesaj de eroare pentru fiecare simbol nerezolvat raportat, dar opțiunea --warn-unresolved-symbols poate schimba acest lucru într-un avertisment.

Afișează numărul versiunii pentru ld și enumeră emulările editorului de legături acceptate. Afișează fișierele de intrare care pot sau nu pot fi deschise. Afișează scriptul editor de legături utilizat de editorul de legături. Dacă argumentul opțional NUMĂR > 1, va fi afișată și starea simbolului modulului.
Specify the name of a version script to the linker. This is typically used when creating shared libraries to specify additional information about the version hierarchy for the library being created. This option is only fully supported on ELF platforms which support shared libraries; see VERSION. It is partially supported on PE platforms, which can use version scripts to filter symbol visibility in auto-export mode: any symbols marked local in the version script will not be exported.
Warn when a common symbol is combined with another common symbol or with a symbol definition. Unix linkers allow this somewhat sloppy practice, but linkers on some other operating systems do not. This option allows you to find potential problems from combining global symbols. Unfortunately, some C libraries use this practice, so you may get some warnings about symbols in the libraries as well as in your programs.

Există trei tipuri de simboluri globale, ilustrate aici prin exemple în limbajul C:

O definiție, care se introduce în secțiunea de date inițializate a fișierului de ieșire.
O referință nedefinită, care nu alocă spațiu. Trebuie să existe undeva fie o definiție, fie un simbol comun pentru variabila respectivă.
Un simbol comun. În cazul în care există doar (unul sau mai multe) simboluri comune pentru o variabilă, aceasta este plasată în zona de date neinițializate din fișierul de ieșire. Editorul de legături unește mai multe simboluri comune pentru aceeași variabilă într-un singur simbol. În cazul în care acestea au dimensiuni diferite, alege cea mai mare dimensiune. Editorul de legături transformă un simbol comun într-o declarație, în cazul în care există o definiție a aceleiași variabile.

The --warn-common option can produce five kinds of warnings. Each warning consists of a pair of lines: the first describes the symbol just encountered, and the second describes the previous symbol encountered with the same name. One or both of the two symbols will be a common symbol.

1.
Transformarea unui simbol obișnuit într-o referință, deoarece există deja o definiție pentru acest simbol.

        <file>(<section>): avertisment: „common” din `<simbol>'
           este suprascris de definiție
        <file>(<section>): avertisment: definit aici
    
2.
Turning a common symbol into a reference, because a later definition for the symbol is encountered. This is the same as the previous case, except that the symbols are encountered in a different order.

        <file>(<section>): warning: definition of `<symbol>'
           overriding common
        <file>(<section>): warning: common is here
    
3.
Fuzionarea unui simbol comun cu un simbol comun anterior de aceeași dimensiune.

        <file>(<section>): warning: multiple common
           of `<symbol>'
        <file>(<section>): warning: previous common is here
    
4.
Fuzionarea unui simbol comun cu un simbol comun anterior, mai mare.

        <file>(<section>): warning: common of `<symbol>'
           overridden by larger common
        <file>(<section>): warning: larger common is here
    
5.
Fuzionarea unui simbol comun cu un simbol comun anterior, mai mic. Este vorba despre același lucru ca în cazul anterior, cu excepția faptului că simbolurile apar într-o ordine diferită.

        <file>(<section>): warning: common of `<symbol>'
           overriding smaller common
        <file>(<section>): warning: smaller common is here
    
Avertizează dacă se utilizează constructori globali. Această opțiune este utilă doar pentru câteva formate de fișiere obiect. În cazul formatelor precum COFF sau ELF, editorul de legături nu poate detecta utilizarea constructorilor globali.
Pe platformele ELF, editorul de legături poate genera mesaje de avertizare dacă i se cere să creeze un fișier de ieșire care conține o stivă executabilă. Există trei stări posibile:
1.
Nu generează niciun avertisment.
2.
Generează întotdeauna avertismente, chiar dacă stiva executabilă este solicitată prin intermediul opțiunii de linie de comandă -z execstack.
3.
Se generează o avertizare doar dacă un fișier obiect solicită o stivă de execuție, dar nu și dacă se utilizează opțiunea -z execstack.

The default state depends upon how the linker was configured when it was built. The --no-warn-execstack option always puts the linker into the no-warnings state. The --warn-execstack option puts the linker into the warn-always state. The --warn-execstack-objects option puts the linker into the warn-for-object-files-only state.

Note: ELF format input files can specify that they need an executable stack by having a .note.GNU-stack section with the executable bit set in its section flags. They can specify that they do not need an executable stack by having the same section, but without the executable flag bit set. If an input file does not have a .note.GNU-stack section then the default behaviour is target specific. For some targets, then absence of such a section implies that an executable stack is required. This is often a problem for hand crafted assembler files.

If the linker is going to generate a warning message about an executable stack then the --error-execstack option will instead change that warning into an error. Note - this option does not change the linker's execstack warning generation state. Use --warn-execstack or --warn-execstack-objects to set a specific warning state.

Opțiunea --no-error-execstack va restabili comportamentul implicit de generare a mesajelor de avertizare.

Warn if multiple global pointer values are required in the output file. This is only meaningful for certain processors, such as the Alpha. Specifically, some processors put large-valued constants in a special section. A special register (the global pointer) points into the middle of this section, so that constants can be loaded efficiently via a base-register relative addressing mode. Since the offset in base-register relative mode is fixed and relatively small (e.g., 16 bits), this limits the maximum size of the constant pool. Thus, in large programs, it is often necessary to use multiple global pointer values in order to be able to address all possible constants. This option causes a warning to be issued whenever this case occurs.
Afișează o singură avertizare pentru fiecare simbol nedefinit, în loc de câte una pentru fiecare modul care face referire la acesta.
Warn if the linker creates a loadable, non-zero sized segment that has all three of the read, write and execute permission flags set. Such a segment represents a potential security vulnerability. In addition warnings will be generated if a thread local storage segment is created with the execute permission flag set, regardless of whether or not it has the read and/or write flags set.

Aceste avertismente sunt activate în mod implicit. Ele pot fi dezactivate prin opțiunea --no-warn-rwx-segments și reactivate prin opțiunea --warn-rwx-segments.

If the linker is going to generate a warning message about an executable, writeable segment, or an executable TLS segment, then the --error-rwx-segments option will turn this warning into an error instead. The --no-error-rwx-segments option will restore the default behaviour of just generating a warning message.

Note - the --error-rwx-segments option does not by itself turn on warnings about these segments. These warnings are either enabled by default, if the linker was configured that way, or via the --warn-rwx-segments command line option.

Warn if the address of an output section is changed because of alignment. Typically, the alignment will be set by an input section. The address will only be changed if it not explicitly specified; that is, if the "SECTIONS" command does not specify a start address for the section.
Afișează un avertisment dacă editorul de legături adaugă DT_TEXTREL la un executabil independent de poziție sau la un obiect partajat.
Avertizează dacă un obiect are un cod mașină ELF alternativ.
Dacă editorul de legături urmează să semnaleze un simbol nerezolvat (vezi opțiunea --unresolved-symbols), acesta va genera, în mod normal, o eroare. Această opțiune face ca acesta să genereze, în schimb, un avertisment.
Aceasta restabilește comportamentul implicit al editorului de legături, de a genera erori atunci când semnalează simboluri nerezolvate.
For each archive mentioned on the command line after the --whole-archive option, include every object file in the archive in the link, rather than searching the archive for the required object files. This is normally used to turn an archive file into a shared library, forcing every object to be included in the resulting shared library. This option may be used more than once.

Two notes when using this option from gcc: First, gcc doesn't know about this option, so you have to use -Wl,-whole-archive. Second, don't forget to use -Wl,-no-whole-archive after your list of archives, because gcc will add its own list of archives to your link and you may not want this flag to affect those as well.

Use a wrapper function for symbol. Any undefined reference to symbol will be resolved to "__wrap_symbol". Any undefined reference to "__real_symbol" will be resolved to symbol.

This can be used to provide a wrapper for a system function. The wrapper function should be called "__wrap_symbol". If it wishes to call the system function, it should call "__real_symbol".

Iată un exemplu banal:

        void *
        __wrap_malloc (size_t c)
        {
          printf ("malloc called with %zu\n", c);
          return __real_malloc (c);
        }
    

If you link other code with this file using --wrap malloc, then all calls to "malloc" will call the function "__wrap_malloc" instead. The call to "__real_malloc" in "__wrap_malloc" will call the real "malloc" function.

You may wish to provide a "__real_malloc" function as well, so that links without the --wrap option will succeed. If you do this, you should not put the definition of "__real_malloc" in the same file as "__wrap_malloc"; if you do, the assembler may resolve the call before the linker has a chance to wrap it to "malloc".

Only undefined references are replaced by the linker. So, translation unit internal references to symbol are not resolved to "__wrap_symbol". In the next example, the call to "f" in "g" is not resolved to "__wrap_f".

        int
        f (void)
        {
          return 123;
        }
       
        int
        g (void)
        {
          return f();
        }
    
Solicită (--eh-frame-hdr) sau suprimă (--no-eh-frame-hdr) crearea secțiunii ".eh_frame_hdr" și a antetului segmentului ELF "PT_GNU_EH_FRAME".
Solicită generarea informațiilor de derulare ".eh_frame" pentru secțiunile de cod generate de editorul de legături, cum ar fi PLT. Această opțiune este activată implicit dacă sunt acceptate informațiile de derulare generate de editorul de legături.
Elimină informațiile privind urmărirea stivei ".sframe" de la ieșire. Această opțiune interzice, de asemenea, crearea datelor de urmărire a stivei SFrame pentru secțiunile de cod generate de editorul de legături, cum ar fi PLT. Această opțiune este dezactivată în mod implicit.
This linker can create the new dynamic tags in ELF. But the older ELF systems may not understand them. If you specify --enable-new-dtags, the new dynamic tags will be created as needed and older dynamic tags will be omitted. If you specify --disable-new-dtags, no new dynamic tags will be created. By default, the new dynamic tags are not created. Note that those options are only available for ELF systems.
Set the default size of the linker's hash tables to a prime number close to number. Increasing this value can reduce the length of time it takes the linker to perform its tasks, at the expense of increasing the linker's memory requirements. Similarly reducing this value can reduce the memory requirements at the expense of speed. The default value is 4051 under normal circumstances and 1021 if the --reduce-memory-overheads command line option is used.
Set the type of linker's hash table(s). style can be either "sysv" for classic ELF ".hash" section, "gnu" for new style GNU ".gnu.hash" section or "both" for both the classic ELF ".hash" and new style GNU ".gnu.hash" hash tables. The default depends upon how the linker was configured, but for most Linux based systems it will be "both".
Pe platformele ELF, aceste opțiuni controlează modul în care sunt comprimate secțiunile de depanare DWARF folosind «zlib».

--compress-debug-sections=none doesn't compress DWARF debug sections. --compress-debug-sections=zlib-gnu compresses DWARF debug sections and renames them to begin with .zdebug instead of .debug. --compress-debug-sections=zlib-gabi also compresses DWARF debug sections, but rather than renaming them it sets the SHF_COMPRESSED flag in the sections' headers.

Opțiunea --compress-debug-sections=zlib este un alias pentru --compress-debug-sections=zlib-gabi.

--compress-debug-sections=zstd comprimă secțiunile de depanare DWARF folosind «zstd».

Note that this option overrides any compression in input debug sections, so if a binary is linked with --compress-debug-sections=none for example, then any compressed debug sections in input files will be uncompressed before they are copied into the output binary.

The default compression behaviour varies depending upon the target involved and the configure options used to build the toolchain. The default can be determined by examining the output from the linker's --help option.

This option reduces memory requirements at ld runtime, at the expense of linking speed. This was introduced to select the old O(n^2) algorithm for link map file generation, rather than the new O(n) algorithm which uses about 40% more memory for symbol storage.

Another effect of the switch is to set the default hash table size to 1021, which again saves memory at the cost of lengthening the linker's run time. This is not done however if the --hash-size switch has been used.

Opțiunea --reduce-memory-overheads poate fi utilizată și pentru a activa alte compromisuri în versiunile viitoare ale editorului de legături.

ld normally caches the relocation information and symbol tables of input files in memory with the unlimited size. This option sets the maximum cache size to size. Note - if the --no-keep-memory command line option has been used then the linker acts as if the maximum cache size has been set to 0 - ie nothing is retained.
Request the creation of a ".note.gnu.build-id" ELF note section or a ".buildid" COFF section. The contents of the note are unique bits identifying this linked file. style can be "uuid" to use 128 random bits; "sha1" to use a 160-bit SHA1 hash, "md5" to use a 128-bit MD5 hash, or "xx" to use a 128-bit XXHASH on the normative parts of the output contents; or "0xhexstring" to use a chosen bit string specified as an even number of hexadecimal digits ("-" and ":" characters between digit pairs are ignored). If style is omitted, "sha1" is used.

The "md5", "sha1", and "xx" styles produces an identifier that is always the same in an identical output file, but are almost certainly unique among all nonidentical output files. It is not intended to be compared as a checksum for the file's contents. A linked file may be changed later by other tools, but the build ID bit string identifying the original linked file does not change.

Pasarea "none" pentru stil dezactivează valoarea din orice opțiuni "--build-id" anterioare din linia de comandă.

Request the creation of a ".note.package" ELF note section. The contents of the note are in JSON format, as per the package metadata specification. For more information see: https://systemd.io/ELF_PACKAGE_METADATA/ The JSON argument support percent-encoding and following %[string] (where string refers to the name in HTML's Named Character References) encoding: %[comma] for ,, %[lbrace] for {, %[quot] for ", %[rbrace] for }, and %[space] for space character. If the JSON argument is missing/empty then this will disable the creation of the metadata note, if one had been enabled by an earlier occurrence of the --package-metadata option. If the linker has been built with libjansson, then the JSON string will be validated.

The i386 PE linker supports the -shared option, which causes the output to be a dynamically linked library (DLL) instead of a normal executable. You should name the output "*.dll" when you use this option. In addition, the linker fully supports the standard "*.def" files, which may be specified on the linker command line like an object file (in fact, it should precede archives it exports symbols from, to ensure that they get linked in, just like a normal object file).

În plus față de opțiunile comune tuturor obiectivelor, editorul de legături i386 PE acceptă opțiuni de linie de comandă suplimentare care sunt specifice obiectivului i386 PE. Opțiunile care iau valori pot fi separate de valorile lor printr-un spațiu sau un semn egal.

Dacă este specificată, simbolurile cu sufixul stdcall (@nn) vor fi exportate atât în forma inițială, cât și fără acest sufix. [Această opțiune este specifică versiunii editorului de legături destinat arhitecturii i386 PE]
Utilizează filșier ca nume al fișierului în care se salvează adresele de bază ale tuturor realocărilor necesare pentru generarea DLL-urilor cu dlltool. [Aceasta este o opțiune specifică pentru PE i386]
Creează o DLL în locul unui executabil obișnuit. De asemenea, puteți utiliza -shared sau specifica o „BIBLIOTECĂ” într-un fișier „.def” dat. [Această opțiune este specifică portului i386 PE vizat de editorul de legături]
The PE variants of the COFF object format add an extension that permits the use of section names longer than eight characters, the normal limit for COFF. By default, these names are only allowed in object files, as fully-linked executable images do not carry the COFF string table required to support the longer names. As a GNU extension, it is possible to allow their use in executable images as well, or to (probably pointlessly!) disallow it in object files, by using these two options. Executable images generated with these long section names are slightly non-standard, carrying as they do a string table, and may generate confusing output when examined with non-GNU PE-aware tools, such as file viewers and dumpers. However, GDB relies on the use of PE long section names to find Dwarf-2 debug information sections in an executable image at runtime, and so if neither option is specified on the command-line, ld will enable long section names, overriding the default and technically correct behaviour, when it finds the presence of debug information while linking an executable image and not stripping symbols. [This option is valid for all PE targeted ports of the linker]
If the link finds a symbol that it cannot resolve, it will attempt to do "fuzzy linking" by looking for another defined symbol that differs only in the format of the symbol name (cdecl vs stdcall) and will resolve that symbol by linking to the match. For example, the undefined symbol "_foo" might be linked to the function "_foo@12", or the undefined symbol "_bar@16" might be linked to the function "_bar". When the linker does this, it prints a warning, since it normally should have failed to link, but sometimes import libraries generated from third-party dlls may need this feature to be usable. If you specify --enable-stdcall-fixup, this feature is fully enabled and warnings are not printed. If you specify --disable-stdcall-fixup, this feature is disabled and such mismatches are considered to be errors. [This option is specific to the i386 PE targeted port of the linker]
Pentru majoritatea țintelor, prefixul implicit al simbolului este o liniuță de subliniere și este definit în descrierea țintei. Prin această opțiune este posibil să dezactivați/activați prefixul implicit al simbolului, reprezentat de o liniuță de subliniere.
If given, all global symbols in the objects used to build a DLL will be exported by the DLL. Note that this is the default if there otherwise wouldn't be any exported symbols. When symbols are explicitly exported via DEF files or implicitly exported via function attributes, the default is to not export anything else unless this option is given. Note that the symbols "DllMain@12", "DllEntryPoint@0", "DllMainCRTStartup@12", and "impure_ptr" will not be automatically exported. Also, symbols imported from other DLLs will not be re-exported, nor will symbols specifying the DLL's internal layout such as those beginning with "_head_" or ending with "_iname". In addition, no symbols from "libgcc", "libstd++", "libmingw32", or "crtX.o" will be exported. Symbols whose names begin with "__rtti_" or "__builtin_" will not be exported, to help with C++ DLLs. Finally, there is an extensive list of cygwin-private symbols that are not exported (obviously, this applies on when building DLLs for cygwin targets). These cygwin-excludes are: "_cygwin_dll_entry@12", "_cygwin_crt0_common@8", "_cygwin_noncygwin_dll_entry@12", "_fmode", "_impure_ptr", "cygwin_attach_dll", "cygwin_premain0", "cygwin_premain1", "cygwin_premain2", "cygwin_premain3", and "environ". [This option is specific to the i386 PE targeted port of the linker]
Specifică o listă de simboluri care nu trebuie exportate automat. Numele simbolurilor pot fi separate prin virgule sau două puncte. [Această opțiune este specifică versiunii pentru ținta i386 PE a editorului de legături]
Specifică faptul că niciun simbol nu trebuie exportat automat. [Această opțiune este specifică versiunii pentru ținta i386 PE a editorului de legături]
Specificați alinierea fișierului. Secțiunile din fișier vor începe întotdeauna la poziții din fișier care sunt multipli ai acestui număr. Valoarea implicită este 512. [Această opțiune este specifică versiunii pentru ținta i386 PE a editorului de legături]
[Această opțiune este specifică versiunii editorului de legături destinat arhitecturii i386 PE]Specifică numărul de octeți de memorie care trebuie rezervați (și, opțional, alocați definitiv) pentru a fi folosiți ca grămadă „heap” pentru acest program. Valoarea implicită este de 1 Mo rezervat și 4 Ko alocat definitiv.
Dacă este specificată, sufixele stdcall (@nn) vor fi eliminate din simboluri înainte ca acestea să fie exportate. [Această opțiune este specifică versiunii editorului de legături destinat arhitecturii i386 PE]
If given, the appropriate bit in the "Characteristics" field of the COFF header is set to indicate that this executable supports virtual addresses greater than 2 gigabytes. This should be used in conjunction with the /3GB or /USERVA=value megabytes switch in the "[operating systems]" section of the BOOT.INI. Otherwise, this bit has no effect. [This option is specific to PE targeted ports of the linker]
Reverts the effect of a previous --large-address-aware option. This is useful if --large-address-aware is always set by the compiler driver (e.g. Cygwin gcc) and the executable does not support virtual addresses greater than 2 gigabytes. [This option is specific to PE targeted ports of the linker]
Stabilește numărul major al „versiunii imaginii”. Valoarea implicită este 1. [Această opțiune este specifică versiunii editorului de legături destinat arhitecturii i386 PE]
Stabilește numărul major al „versiunii sistemului de operare”. Valoarea implicită este 4. [Această opțiune este specifică versiunii editorului de legături destinat arhitecturii i386 PE]
Stabilește numărul major al „versiunii subsistemului”. Valoarea implicită este 4. [Această opțiune este specifică versiunii editorului de legături destinat arhitecturii i386 PE]
Stabilește numărul minor al „versiunii imaginii”. Valoarea implicită este 0. [Această opțiune este specifică versiunii editorului de legături destinat arhitecturii i386 PE]
Stabilește numărul minor al „versiunii sistemului de operare”. Valoarea implicită este 0. [Această opțiune este specifică versiunii editorului de legături destinat arhitecturii i386 PE]
Stabilește numărul minor al „versiunii subsistemului”. Valoarea implicită este 0. [Această opțiune este specifică versiunii editorului de legături destinat arhitecturii i386 PE]
The linker will create the file file which will contain a DEF file corresponding to the DLL the linker is generating. This DEF file (which should be called "*.def") may be used to create an import library with "dlltool" or may be used as a reference to automatically or implicitly exported symbols. [This option is specific to the i386 PE targeted port of the linker]
Alege automat baza de imagine pentru DLL-uri, opțional începând cu baza valoare, cu excepția cazului în care este specificată una folosind argumentul "--image-base". Prin utilizarea unei sume de control (hash) generată din nume-dll pentru a crea baze de imagini unice pentru fiecare DLL, sunt evitate coliziunile și realocările în memorie care pot întârzia executarea programului. [Această opțiune este specifică versiunii editorului de legături destinat pentru PE i386]
Nu generează automat o bază de imagine unică. Dacă nu există o bază de imagine specificată de utilizator („--image-base”), atunci utilizează valoarea implicită a platformei. [Această opțiune este specifică versiunii i386 PE a editorului de legături]
When linking dynamically to a dll without an import library, search for "<string><basename>.dll" in preference to "lib<basename>.dll". This behaviour allows easy distinction between DLLs built for the various "subplatforms": native, cygwin, uwin, pw, etc. For instance, cygwin DLLs typically use "--dll-search-prefix=cyg". [This option is specific to the i386 PE targeted port of the linker]
Do sophisticated linking of "_symbol" to "__imp__symbol" for DATA imports from DLLs, thus making it possible to bypass the dllimport mechanism on the user side and to reference unmangled symbol names. [This option is specific to the i386 PE targeted port of the linker]

Următoarele observații se referă la implementarea inițială a funcționalității și sunt în prezent depășite pentru țintele Cygwin și MinGW.

Notă: Utilizarea extensiei „auto-import” va face ca secțiunea de text a fișierului imagine să devină modificabilă. Acest lucru nu respectă specificațiile formatului PE-COFF publicate de Microsoft.

Note - use of the 'auto-import' extension will also cause read only data which would normally be placed into the .rdata section to be placed into the .data section instead. This is in order to work around a problem with consts that is described here: http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html

În general, utilizarea opțiunii de „import automat”, va „funcționa” – dar uneori s-ar putea să primiți acest mesaj:

"variabila «<var>» nu poate fi importată automat. Pentru detalii, consultați documentația referitoare la opțiunea "--enable-auto-import" a programului ld."

This message occurs when some (sub)expression accesses an address ultimately given by the sum of two constants (Win32 import tables only allow one). Instances where this may occur include accesses to member fields of struct variables imported from a DLL, as well as using a constant index into an array variable imported from a DLL. Any multiword variable (arrays, structs, long long, etc) may trigger this error condition. However, regardless of the exact data type of the offending exported variable, ld will always detect it, issue the warning, and exit.

Există mai multe modalități de a rezolva această problemă, indiferent de tipul de date al variabilei exportate:

O soluție este utilizarea opțiunii „--enable-runtime-pseudo-reloc”. Aceasta lasă sarcina ajustării referințelor în codul clientului în seama mediului de execuție, astfel încât această metodă funcționează numai dacă mediul de execuție acceptă această caracteristică.

O a doua soluție constă în a transforma una dintre „constantele” respective într-o variabilă — adică într-o valoare necunoscută și care nu poate fi optimizată în timpul compilării. În cazul matricilor, există două posibilități: a) transformarea elementului indexat (adresa matricei) într-o variabilă sau b) transformarea indexului „constant” într-o variabilă. Astfel:

        extern type extern_array[];
        extern_array[1] -->
           { volatile type *t=extern_array; t[1] }
    

sau

        extern type extern_array[];
        extern_array[1] -->
           { volatile int t=1; extern_array[t] }
    

Pentru structuri (și majoritatea celorlalte tipuri de date cu mai multe cuvinte), singura opțiune este de a face structura în sine variabilă (sau long long, sau ...):

        extern struct s extern_struct;
        extern_struct.field -->
           { volatile struct s *t=&extern_struct; t->field }
    

sau

        extern long long extern_ll;
        extern_ll -->
          { volatile long long * local_ll=&extern_ll; *local_ll }
    

A third method of dealing with this difficulty is to abandon 'auto-import' for the offending symbol and mark it with "__declspec(dllimport)". However, in practice that requires using compile-time #defines to indicate whether you are building a DLL, building client code that will link to the DLL, or merely building/linking to a static library. In making the choice between the various methods of resolving the 'direct address with constant offset' problem, you should consider typical real-world usage:

Original:

        --foo.h
        extern int arr[];
        --foo.c
        #include "foo.h"
        void main(int argc, char **argv){
          printf("%d\n",arr[1]);
        }
    

Soluția 1:

        --foo.h
        extern int arr[];
        --foo.c
        #include "foo.h"
        void main(int argc, char **argv){
          /* This workaround is for win32 and cygwin; do not "optimize" */
          volatile int *parr = arr;
          printf("%d\n",parr[1]);
        }
    

Soluția 2:

        --foo.h
        /* Note: auto-export is assumed (no __declspec(dllexport)) */
        #if (defined(_WIN32) || defined(__CYGWIN__)) && \
          !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC))
        #define FOO_IMPORT __declspec(dllimport)
        #else
        #define FOO_IMPORT
        #endif
        extern FOO_IMPORT int arr[];
        --foo.c
        #include "foo.h"
        void main(int argc, char **argv){
          printf("%d\n",arr[1]);
        }
    

O a patra modalitate de a evita această problemă este de a vă recodifica biblioteca pentru a utiliza o interfață funcțională mai degrabă decât o interfață de date pentru variabilele în cauză (de exemplu, funcțiile de accesor set_foo() și get_foo()).

Nu încearcă să facă legarea sofisticată a „_symbol” la „__imp__symbol” pentru importurile de DATE din DLL-uri. [Această opțiune este specifică portului i386 PE al editorului de legături]
If your code contains expressions described in --enable-auto-import section, that is, DATA imports from DLL with non-zero offset, this switch will create a vector of 'runtime pseudo relocations' which can be used by runtime environment to adjust references to such data in your client code. [This option is specific to the i386 PE targeted port of the linker]
Nu creează pseudorealocări pentru importurile de DATE cu o poziție diferită de zero din DLL-uri. [Această opțiune este specifică versiunii editorului de legături pentru i386 PE]
Afișează informații suplimentare de depanare referitoare la procesul de transformare a simbolurilor în timpul importului automat. [Această opțiune este specifică versiunii editorului de legături pentru i386 PE]
Stabilește alinierea secțiunilor. Secțiunile din memorie vor începe întotdeauna la adrese care sunt un multiplu al acestui număr. Valoarea implicită este 0x1000. [Această opțiune este specifică versiunii editorului de legături pentru i386 PE]
Specifică numărul de octeți de memorie care trebuie rezervați (și, opțional, alocați definitiv) pentru a fi folosiți ca stivă pentru acest program. Valoarea implicită este de 2 Mo rezervați și 4 Ko alocați definitiv. [Această opțiune este specifică versiunii editorului de legături pentru i386 PE]
Specifică subsistemul în cadrul căruia se va executa programul. Valorile permise pentru care sunt "native", "windows", "console", "posix" și "xbox". Opțional, puteți defini și versiunea subsistemului. Sunt acceptate, de asemenea, valori numerice pentru care. [Această opțiune este specifică versiunii editorului de legături pentru i386 PE]

Următoarele opțiuni activează fanioanele din câmpul "DllCharacteristics" al antetului fișierului PE: [Aceste opțiuni sunt specifice versiunii editorului de legături pentru PE]

Imaginea este compatibilă cu randomizarea aspectului spațiului de adrese („address space layout randomization”: ASLR) pe 64 de biți. Această opțiune este activată în mod implicit pentru imaginile PE pe 64 de biți din țintele MinGW.

Această opțiune implică, de asemenea, --dynamicbase și --enable-reloc-section.

The image base address may be relocated using address space layout randomization (ASLR). This feature was introduced with MS Windows Vista for i386 PE targets. This option is enabled by default for MinGW targets but can be disabled via the --disable-dynamicbase option. This option also implies --enable-reloc-section.
Verificările de integritate a codului sunt puse în aplicare. Această opțiune este dezactivată în mod implicit.
Imaginea este compatibilă cu funcția Data Execution Prevention. Această funcție a fost introdusă odată cu MS Windows XP SP2 pentru țintele i386 PE. Opțiunea este activată în mod implicit pentru țintele MinGW.
Deși imaginea înțelege izolarea, nu izolează imaginea. Această opțiune este dezactivată în mod implicit.
Imaginea nu utilizează SEH. Nici un gestionar SE nu poate fi apelat din această imagine. Această opțiune este dezactivată în mod implicit.
Nu asociază această imagine. Această opțiune este dezactivată în mod implicit.
Controlorul folosește modelul de controlor MS Windows. Această opțiune este dezactivată în mod implicit.
Imaginea este compatibilă cu Terminal Server. Această opțiune este dezactivată în mod implicit.
Insert a real timestamp into the image. This is the default behaviour as it matches legacy code and it means that the image will work with other, proprietary tools. The problem with this default is that it will result in slightly different images being produced each time the same sources are linked. The option --no-insert-timestamp can be used to insert a zero value for the timestamp, this ensuring that binaries produced from identical sources will compare identically.

If --insert-timestamp is active then the time inserted is either the time that the linking takes place or, if the "SOURCE_DATE_EPOCH" environment variable is defined, the number of seconds since Unix epoch as specified by that variable.

Creează tabelul de realocare a bazei, care este necesar în cazul în care imaginea este încărcată la o bază de imagine diferită de cea specificată în antetul PE. Această opțiune este activată în mod implicit.

Platforma C6X uClinux utilizează un format binar numit DSBT pentru a gestiona bibliotecile partajate. Fiecare bibliotecă partajată din sistem trebuie să aibă un index unic; toate fișierele executabile utilizează indexul 0.

Această opțiune definește numărul de intrări din tabelul DSBT al executabilului sau al bibliotecii partajate curente la size. Implicit, se creează un tabel cu 64 de intrări.
This option sets the DSBT index of the current executable or shared library to index. The default is 0, which is appropriate for generating executables. If a shared library is generated with a DSBT index of 0, the "R_C6000_DSBT_INDEX" relocs are copied into the output file.

Opțiunea --no-merge-exidx-entries dezactivează combinarea intrărilor exidx adiacente în informațiile de desfășurare a cadrelor.

This option enables linker branch relaxation by inserting branch stub sections when needed to extend the range of branches. This option is usually not required since C-SKY supports branch and call instructions that can access the full memory range and branch relaxation is normally handled by the compiler or assembler.
This option allows finer control of linker branch stub creation. It sets the maximum size of a group of input sections that can be handled by one stub section. A negative value of N locates stub sections after their branches, while a positive value allows stub sections to appear either before or after the branches. Values of 1 or -1 indicate that the linker should choose suitable defaults.

Editorii de legături 68HC11 și 68HC12 acceptă opțiuni specifice pentru controlul cartografierii comutării băncilor de memorie și generarea de cod trambulină.

Această opțiune dezactivează generarea de trambuline. În mod implicit, se generează o trambulină pentru fiecare funcție îndepărtată care este apelată folosind o instrucțiune "jsr" (acest lucru se întâmplă atunci când se accesează un indicator către o funcție îndepărtată).
Această opțiune indică editorului de legături numele regiunii de memorie din specificația MEMORY care descrie fereastra băncii de memorie. Definiția acestei regiuni este apoi utilizată de editorul de legături pentru a calcula paginarea și adresele din cadrul ferestrei de memorie.

Sunt acceptate următoarele opțiuni pentru a controla modul de generare a GOT la legarea pentru ținte 68K.

Această opțiune indică editorului de legături ce schemă de generare GOT să utilizeze. tip trebuie să fie una dintre următoarele: single, negative, multigot sau target. Pentru mai multe informații, consultați intrarea Info pentru ld.

Următoarele opțiuni sunt acceptate pentru a controla generarea instrucțiunilor microMIPS și verificările de realocare de ramuri în cazul tranzițiilor între modurile ISA la legarea pentru țintele MIPS.

These options control the choice of microMIPS instructions used in code generated by the linker, such as that in the PLT or lazy binding stubs, or in relaxation. If --insn32 is used, then the linker only uses 32-bit instruction encodings. By default or if --no-insn32 is used, all instruction encodings are used, including 16-bit ones where possible.
These options control branch relocation checks for invalid ISA mode transitions. If --ignore-branch-isa is used, then the linker accepts any branch relocations and any ISA mode transition required is lost in relocation calculation, except for some cases of "BAL" instructions which meet relaxation conditions and are converted to equivalent "JALX" instructions as the associated relocation is calculated. By default or if --no-ignore-branch-isa is used a check is made causing the loss of an ISA mode transition to produce an error.
Aceste opțiuni controlează generarea de instrucțiuni compacte de către editorul de legături în intrările PLT pentru MIPS R6.

For the pdp11-aout target, three variants of the output format can be produced as selected by the following options. The default variant for pdp11-aout is the --omagic option, whereas for other targets --nmagic is the default. The --imagic option is defined only for the pdp11-aout target, while the others are described here as they apply to the pdp11-aout target.

Mark the output as "OMAGIC" (0407) in the a.out header to indicate that the text segment is not to be write-protected and shared. Since the text and data sections are both readable and writable, the data section is allocated immediately contiguous after the text segment. This is the oldest format for PDP11 executable programs and is the default for ld on PDP11 Unix systems from the beginning through 2.11BSD.
Mark the output as "NMAGIC" (0410) in the a.out header to indicate that when the output file is executed, the text portion will be read-only and shareable among all processes executing the same file. This involves moving the data areas up to the first possible 8K byte page boundary following the end of the text. This option creates a pure executable format.
Mark the output as "IMAGIC" (0411) in the a.out header to indicate that when the output file is executed, the program text and data areas will be loaded into separate address spaces using the split instruction and data space feature of the memory management unit in larger models of the PDP11. This doubles the address space available to the program. The text segment is again pure, write-protected, and shareable. The only difference in the output format between this option and the others, besides the magic number, is that both the text and data sections start at location 0. The -z option selected this format in 2.11BSD. This option creates a separate executable format.
Echivalent cu --nmagic pentru pdp11-aout.

MEDIU

Puteți modifica comportamentul ld folosind variabilele de mediu "GNUTARGET", "LDEMULATION" și "COLLECT_NO_DEMANGLE".

"GNUTARGET" determines the input-file object format if you don't use -b (or its synonym --format). Its value should be one of the BFD names for an input format. If there is no "GNUTARGET" in the environment, ld uses the natural format of the target. If "GNUTARGET" is set to "default" then BFD attempts to discover the input format by examining binary input files; this method often succeeds, but there are potential ambiguities, since there is no method of ensuring that the magic number used to specify object-file formats is unique. However, the configuration procedure for BFD on each system places the conventional format for that system first in the search-list, so ambiguities are resolved in favor of convention.

"LDEMULATION" determines the default emulation if you don't use the -m option. The emulation can affect various aspects of linker behaviour, particularly the default linker script. You can list the available emulations with the --verbose or -V options. If the -m option is not used, and the "LDEMULATION" environment variable is not defined, the default emulation depends upon how the linker was configured.

În mod normal, editorul de legături va proceda în mod implicit la decodificarea simbolurilor. Cu toate acestea, dacă "COLLECT_NO_DEMANGLE" este definită în mediu, atunci se va renunța implicit la decodificarea simbolurilor. Această variabilă de mediu este utilizată într-o manieră similară de către programul "gcc" de învăluire a editorului de legături. Valoarea implicită poate fi anulată de opțiunile --demangle și --no-demangle.

If the PE/COFF specific --insert-timestamp is active and the SOURCE_DATE_EPOCH environment variable is defined, then the timestamp value in this variable will be inserted into the COFF header instead of the current time.

If the "LD_STATS" environment variable is defined then linker resource use information will be recorded, just as if the --stats option had been used. If the "LD_STATS" variable has a string value then this will used as the name of a file into which the information should be stored. Otherwise the information will be sent to the standard output stream.

CONSULTAȚI ȘI

ar(1), nm(1), objcopy(1), objdump(1), readelf(1) și intrările Info pentru binutils și ld.

DREPTURI DE AUTOR

Drepturi de autor © 1991-2026 Free Software Foundation, Inc.

Se acordă permisiunea de a copia, distribui și/sau modifica acest document în conformitate cu termenii Licenței GNU Free Documentation, versiunea 1.3 sau orice versiune ulterioară publicată de Free Software Foundation; fără secțiuni invariante, fără texte de copertă și fără texte de contra copertă. O copie a licenței este inclusă în secțiunea intitulată „GNU Free Documentation License”.

TRADUCERE

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

5 martie 2026 binutils-2.46