Go to the first, previous, next, last section, table of contents.


실행

The GNU linker ld is meant to cover a broad range of situations, and to be as compatible as possible with other linkers. As a result, you have many choices to control its behavior.

GNU 링커인 ld는 광범위한 용도로 사용되고, 가능한 다른 링커들과 호환이 되게 설계되었다. 이 결과로 실행을 제어하는 많은 옵션을 가진다.

명령행 옵션

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의 흔한 용도는 유닉스 시스템에서 표준 유닉스 오브젝트 파일을 링크하는 것이다. 이 경우 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.)

위에서 ld/lib/crt0.o, hello.o와 표준 검색 디렉토리에 있는 라이브러리 libc.a를 링크하여 결과로 output를 만든다. (`-l' 옵션은 아래서 설명된다.)

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.

여러 명령행 옵션은 명령행에서 아무 곳이나 위치해도 된다. 그러나 `-l'`-T'와 같이 파일과 관련된 옵션의 경우, 명령행에서 옵션의 순서대로 파일을 읽는다. 파일과 관련이 없는 옵션을 서로 다른 아규먼트를 가지고 여러번 사용하면 무효가 되거나 (명령행의 왼쪽) 전의 옵션을 무시한다. 여러번 반복되도 되는 옵션은 아래 옵션 설명에 명시된다.

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'.

링커는 보통 최소한 한 오브젝트 파일을 가지고 실행된다. 그러나 `-l', `-R' 옵션이나 스크립트 명령 언어로도 입력 파일을 지정할 수 있다. 어떤 이진 입력 파일도 주어지지 않다면, 링커는 어떤 출력 파일도 만들지않고 `No input files'라고 출력을 한다.

If the linker can not 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. Note that specifying a script in this way should only be used to augment the main linker script; if you want to use some command that logically can only appear once, such as the SECTIONS or MEMORY command, you must replace the default linker script using the `-T' option. See section Linker Scripts.

링커가 오브젝트 파일 형식을 알아내지 못하면, 이를 링커 스크립트로 간주한다. 이렇게 주어진 스크립트는 주 링커 스크립트를 (기본 링커 스크립트나 `-T' 옵션으로 지정한 스크립트) 보완한다. 이런 스크립트를 이용하여 오브젝트 파일이나 아카이브 파일처럼 보이는 파일들을 링크할 수 있지만, 실제로 심볼값을 정의하거나 다른 오브젝트를 읽어들이기 위해 INPUT, GROUP을 사용한다. 이렇게 주어진 스크립트는 주 링커 스크립트를 보완하는데만 사용되는 것을 주의하라. 만약 SECTIONSMEMORY 명령어와 같이 의미상 한번만 나와야하는 명령어를 사용해야 한다면, `-T' 옵션으로 기본 링커 스크립트를 대체해야 한다. Linker Scripts를 참고하라.

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 preceeded 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.

이름이 여러 문자인 옵션은 옵션 이름 앞에 하나나 두개의 빼기 기호를 쓴다. 예를 들어, `-trace-symbol'`--trace-symbol'는 동일하다. 주의! 이 규칙에 예외가 있다. 여러 문자 옵션이 소문자 'o'로 시작하면 `-o 옵션과 혼동을 피하기 위해서 빼기 기호를 두개 써줘야 한다. 그래서 `-omagic은 출력 파일이름을 `magic'으로 하고, `--omagic'은 출력에 NMAGIC 플래그를 설정한다.

Arguments to multiple-letter options must either be separated from the option name by an equals sign, or be given as separate arguments immediately following the option that requires them. For example, `--trace-symbol foo' and `--trace-symbol=foo' are equivalent. Unique abbreviations of the names of multiple-letter options are accepted.

여러 문자 옵션의 아규먼트는 옵션과 등호로 연결되거나 옵션 뒤에 독립된 아규먼트로 주어진다. 예를 들어, `--trace-symbol foo'`--trace-symbol=foo'는 동일하다. 여러 문자 옵션의 줄인 이름도 있다.

Note - if the linker is being invoked indirectly, via a compiler driver (eg `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,'을 (혹은 특정 컴파일러 드라이버에 해당하는) 붙여야 한다.

  gcc -Wl,--startgroup foo.o bar.o -Wl,--endgroup

This is important, because otherwise the compiler driver program may silently drop the linker options, resulting in a bad link.

그렇지 않으면 컴파일러 드라이버 프로그램이 링커 옵션을 무시하여 링크를 잘못하게 된다.

Here is a table of the generic command line switches accepted by the GNU linker:

다음은 GNU 링커의 일반 명령행 옵션들이다.

-akeyword
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.
HP/UX와 호환을 위한 옵션이다. keyword 아규먼트는 `archive', `shared', `default' 중 하나이다. `-aarchive'는 기능상 `-Bstatic'과 동일하고, 다른 두 옵션은 `-Bdynamic'과 동일하다. 이 옵션은 여러번 사용할 수 있다.
-Aarchitecture
--architecture=architecture
In the current release of ld, this option is useful only for the Intel 960 family of architectures. In that ld configuration, the architecture argument identifies the particular architecture in the 960 family, enabling some safeguards and modifying the archive-library search path. See section ld and the Intel 960 family, for details. Future releases of ld may support similar functionality for other architecture families.
현재는 Intel 960 아키텍쳐에서만 사용된다. 이 경우 architecture 아규먼트는 960 계열에서 특정 아키텍쳐를 지정하여 몇몇 안전책을 사용하고 아카이브 라이브러리 검색 경로를 수정한다. 자세한 정보는 ld and the Intel 960 family을 참고하라. 앞으로 다른 아키텍쳐 계열에서도 비슷한 기능을 지원할 수 있다.
-b input-format
--format=input-format
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'.) See section BFD. 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. The default format is taken from the environment variable GNUTARGET. See section Environment Variables. You can also define the input format from a script, using the command TARGET; see section Commands dealing with object file formats.
ld는 여러개의 오브젝트 파일 형식을 지원할 수 있다. 만약 그렇다면 `-b' 옵션으로 이 옵션 뒤에 나오는 입력 오브젝트 파일의 형식을 지정할 수 있다. 그러나 이를 지정하지 않아도 ld는 각 플래폼에서 가장 많이 쓰이는 형식을 기본 형식으로 고려한다. input-format은 문자열로 BFD 라이브러리가 지원하는 형식의 이름이다. (가능한 형식은 `objdump -i'로 확인할 수 있다.) BFD를 참조하라. 보통 많이 쓰이지 않는 형식의 파일을 링크할 때, 이 옵션을 사용한다. 또, 여러 다른 형식의 오브젝트 파일을 링크할 때 각 형식의 오브젝트 파일들 앞에 `-b input-format'를 사용하여 명시적으로 형식을 변환할 수 있다. 기본 형식은 환경변수 GNUTARGET에서 읽어들인다. Environment Variables를 참고하라. 또, TARGET 명령어를 사용하여 스크립트에서 입력 형식을 정의할 수도 있다. Commands dealing with object file formats를 참고하라.
-c MRI-commandfile
--mri-script=MRI-commandfile
For compatibility with linkers produced by MRI, ld accepts script files written in an alternate, restricted command language, described in section MRI Compatible Script Files. 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.
MRI 링커와 호환을 유지하기 위해서 ldMRI Compatible Script Files에 설명된 별도의 제한된 명령 언어를 받아들인다. MRI 스크립트 파일은 `-c' 옵션과 함께 사용한다. (범용 ld 스크립트 언어로 쓰여진 파일은 `-T' 옵션과 함께 사용한다.) MRI-cmdfile을 찾지못하면, `-L' 옵션으로 지정한 디렉토리에서 찾는다.
-d
-dc
-dp
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. See section Other linker script commands.
이 세 옵션은 다른 링커들과 호환을 위한 것으로 동일한 기능을 한다. 이들은 (`-r' 옵션으로) 재배치가능한 출력 파일이 지정되었어도 공통 심볼(common symbol, 역주; pascal의 common block에서 유래한 것으로, C의 경우 보통 초기화하지 않은 전역변수를 오브젝트 파일에 공통 심볼로 저장한다.)에 공간을 할당한다. 스크립트 명령어 FORCE_COMMON_ALLOCATION도 같은 기능을 한다. Other linker script commands를 참조하라.
-e entry
--entry=entry
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). See section Setting the entry point, for a discussion of defaults and other ways of specifying the entry point.
프로그램의 실행 시작 심볼로 기본값 대신에 entry를 사용한다. entry란 심볼이 없다면 링커는 이를 숫자로 해석한다. (기본적으로 10 진수로 해석된다. 16진수는 `0x', 8진수는 `0'를 앞에 붙여야 한다.) 실행 시작점에 대해서는 Setting the entry point를 참고하라.
-E
--export-dynamic
When creating a dynamically linked executable, 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. If you do not use this option, the dynamic symbol table will normally contain only those symbols which are referenced by some dynamic object mentioned in the link. 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.
동적 링크된 실행파일을 만들 때 모든 심볼을 동적 심볼표에 추가한다. 동적 심볼표는 실행 중 볼 수 있는 동적 객체의 심볼들이다. 이 옵션을 사용하지 않으면, 동적 심볼표는 링크에서 언급된 동적 객체에서 참조하는 심볼만을 포함한다. 만약 dlopen을 사용하여 프로그램에서 정의한 심볼을 나중에 참조하는 동적 객체를 읽어들인다면 아마도 이 옵션이 필요할 것이다.
-EB
Link big-endian objects. This affects the default output format.
big-endian 객체를 링크한다. 기본 출력형식에 영향을 준다.
-EL
Link little-endian objects. This affects the default output format.
little-endian 객체를 링크한다. 기본 출력형식에 영향을 준다.
-f
--auxiliary name
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. This option may be specified more than once. The DT_AUXILIARY entries will be created in the order in which they appear on the command line.
ELF 공유 객체를 만들 때 내부 DT_AUXILIARY 필드를 name으로 설정한다. 그러면 동적 링커는 공유 객체의 심볼표를 name이라는 공유 객체의 심볼표에 대한 부수적인 필터로 사용한다. 나중에 이 필터 객체와 링크한 프로그램을 실행하면 동적 링커는 DT_AUXILIARY 필드를 찾는다. 동적 링커가 필터 객체에서 어떤 심볼을 찾는다면 먼저 name이라는 공유 객체에 정의가 있는지 확인한다. 만약 있다면 필터 객체의 정의 대신에 사용한다. name이라는 공유 객체는 없어도 된다. 그래서 name이라는 공유 객체는 디버깅이나 특유의 성능을 위한 함수의 다른 구현을 제공할 수 있다.
-F name
--filter name
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.
ELF 공유 객체를 만들 때 내부 DT_FILTER 필드를 name으로 설정한다. 그러면 동적 링커는 생성할 공유 객체의 심볼표를 name이라는 공유 객체의 심볼표에 필터로 사용한다. 나중에 이 필터 객체와 링크한 프로그램을 실행하면, 동적 링커는 DT_FILTER 필드를 발견한다. 동적 링커는 보통과 같이 공유 객체의 심볼표에 해당하는 심볼을 리졸브하지만, 실제로 name이라는 공유 객체의 정의에 링크한다. 그래서 필터 객체는 name 객체가 제공하는 심볼의 부분집합으로 사용될 수 있다. 몇몇 오래된 링커는 컴파일 과정에서 입출력 오브젝트 파일의 형식을 지정하기 위해 -F 옵션을 사용했다. GNU 링커는 이 목적으로, -b, --format, --oformat 옵션과 스크립트에서 TARGET 명령어, 환경변수 GNUTARGET을 사용한다. GNU 링커는 ELF 공유 객체를 만들지 않다면 -F 옵션을 무시한다.
-fini name

ELF 실행파일이나 공유 객체를 만들는 경우, DT_FINI를 함수 name의 주소로 설정하여 언로드될 때 name을 호출하게 한다. 기본값으로 _fini를 사용한다.
-g
Ignored. Provided for compatibility with other tools.
무시된다. 다른 도구와 호환성을 위해 있다.
-Gvalue
--gpsize=value
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 ECOFF which supports putting large and small objects into different sections. This is ignored for other object file formats.
GP 레지스터를 사용하여 최적화하는 객체의 최대 크기를 size로 설정한다. 이 옵션은 큰고 작은 객체를 다른 섹션에 집어넣는 것이 가능한 MIPS ECOFF 같은 형식에만 의미가 있다. 다른 오브젝트 파일 형식에서는 무시된다. (역주; 작은 객체들을 모아서 베이스 레지스터(GP, global pointer)에서 고정된 옵셋으로 객체들을 접근할 때 쓰인다. 보통 이들 객체가 한 메모리 페이지 안에 들어가므로 빠른 접근이 가능하다.)
-hname
-soname=name
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 the using the file name given to the linker.
ELF 공유 객체를 만들 때, 내부 DT_SONAME 필드를 지정한 name으로 설정한다. DT_SONAME 필드를 가진 공유 객체와 링크된 실행파일이 실행될 때, 동적 링커는 링커에 주어진 파일이름 대신에 DT_SONAME 필드에 나온 공유 객체를 읽으려고 시도한다. (역주; 이 방식으로 공유 라이브러리의 최신 버전을 사용하게 된다.)
-i
Perform an incremental link (same as option `-r').
증가적 링크를 한다. (`-r' 옵션과 같다.) (역주; 개발중 잧은 링크시 바뀐 부분만 링크를 하여 속도를 향상시킨다.)
-init name
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.
ELF 실행파일이나 공유 객체를 만들는 경우, DT_INIT를 함수 name의 주소로 설정하여 로드할 때 name을 호출한다. 기본값으로 _init를 사용한다.
-larchive
--library=archive
Add archive file archive to the list of files to link. This option may be used any number of times. ld will search its path-list for occurrences of libarchive.a for every archive specified. On systems which support shared libraries, ld may also search for libraries with extensions other than .a. Specifically, on ELF and SunOS systems, ld will search a directory for a library with an extension of .so before searching for one with an extension of .a. By convention, a .so extension indicates a shared library. 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.
링크할 파일 목록에 아카이브 파일 archive를 추가한다. 이 옵션은 여러번 사용할 수 있다. 각 archive에 대해서 ld는 자체 패스에서 libarchive.a를 찾는다. 공유 라이브러리를 지원하는 시스템에서는 .a 외의 확장자를 가진 라이브러리도 찾는다. 구체적으로 ELF와 SunOS 시스템에서 .a 확장자를 가진 라이브러리를 찾기 전에 .so 확장자를 가진 라이브러리를 찾는다. 관습으로 .so 확장자는 공유 라이브러리를 나타낸다. 링커는 명령행에 주어진 위치에서 단 한번만 라이브러리를 찾는다. 명령행에서 라이브러리 전에 위치한 파일에서 정의되지 않은 심볼을 라이브러리가 정의하면, 링커는 라이브러리로 부터 적당한 파일을 포함한다. 그러나 명령행에서 뒤에 위치한 파일의 정의되지 않은 심볼은 라이브러리에서 다시 찾지 않는다. See the -( option for a way to force the linker to search archives multiple times. You may list the same archive multiple times on the command line. This type of archive searching is standard for Unix linkers. However, if you are using ld on AIX, note that it is different from the behaviour of the AIX linker.
링커가 라이브러리를 여러번 찾게 만드려면 -( 옵션을 참고하라. 또, 명령행에서 같은 라이브러리를 여러번 명시해도 된다. 이런 라이브러리 검색은 유닉스 링커의 표준이다. 그러나 AIX의 AIX 링커는 다른 행동을 한다는 것을 유의하라.
-Lsearchdir
--library-path=searchdir
Add path searchdir to the list of paths that ld will search for archive libraries and ld control scripts. You may use this option any number of times. The directories are searched in the order in which they are specified on the command line. Directories specified on the command line are searched before the default directories. All -L options apply to all -l options, regardless of the order in which the options appear. The default set of paths searched (without being specified with `-L') depends on which emulation mode ld is using, and in some cases also on how it was configured. See section Environment Variables. 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.
ld가 아카이브 라이브러리와 스크립트르르 찾는 패스 목록에 searchdir을 추가한다. 이 옵션은 여러번 사용해도 된다. 디렉토리는 명령행에 주어진 순서로 검색된다. 명령행에 주어진 디렉토리는 기본 디렉토리 전에 검색된다. 모든 -L 옵션은 옵션의 순서와 관계없이 모든 -l 옵션에 적용된다. 기본 패스는 ld가 사용하는 에뮬레이션 모드와 어떻게 구성되었냐에 따라 다르다. Environment Variables를 참고하라. 패스는 링크 스크립트에서 SEARCH_DIR 명령어로도 지정될 수 있다. 이 방식으로 지정된 디렉토리는 명령행에서 링커 스크립트의 위치에서 검색된다.
-memulation
Emulate the emulation linker. You can list the available emulations with the `--verbose' or `-V' options. If the `-m' option is not used, the emulation is taken from the LDEMULATION environment variable, if that is defined. Otherwise, the default emulation depends upon how the linker was configured.
링커 emulation를 에뮬레이트한다. 가능한 목록을 `--verbose'`-V' 옵션으로 알 수 있다. `-m' 옵션을 사용하지 않고 LDEMULATION 환경변수가 정의되있다면 이를 사용한다. 정의되있지 않다면 기본 에뮬레이션은 링커가 구성된 방식에 따라 다르다.
-M
--print-map
Print a link map to the standard output. A link map provides information about the link, including the following:
링크맵을 표준출력으로 출력한다. 링크맵은 다음과 같은 링크에 대한 정보를 담고 있다.
  • 오브젝트 파일과 심볼이 메모리의 어디에 대응되는가
  • 공통 심볼은 어떻게 할당되는가
  • 아카이브 멤버를 포함하게 한 심볼과 함께 링크에 포함된 모든 아카이브 멤버
-n
--nmagic
Turn off page alignment of sections, and mark the output as NMAGIC if possible.
섹션의 페이지 정렬을 끄고, 가능하면, 출력을 NMAGIC으로 표시한다. (역주; NMAGIC은 a.out 오브젝트 파일 형식의 일종이다.)
-N
--omagic
Set the text and data sections to be readable and writable. Also, do not page-align the data segment. If the output format supports Unix style magic numbers, mark the output as OMAGIC.
text와 data 섹션을 읽고쓰기 가능으로 설정한다. 또, data 섹션을 페이지 정렬하지 않는다. 출력 형식이 유닉스 형식의 메직넘버를 지원하면 출력을 OMAGIC으로 표시한다. (역주; OMAGIC은 a.out 오브젝트 파일 형식의 일종이다.)
-o output
--output=output
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.
ld의 결과로 생성될 프로그램 이름을 output으로 한다. 이 옵션이 없다면 기본적으로 `a.out'이 사용된다. 스크립트 명령어 OUTPUT도 출력파일 이름을 정한다.
-O level
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.
level이 0 보다 큰 숫자이면 ld는 출력을 최적화한다. 이 과정은 상당히 길 수 있기 때문에 아마도 마지막에 사용된다.
-q
--emit-relocs
Leave relocation sections and contents in fully linked exececutables. Post link analysis and optimization tools may need this information in order to perform correct modifications of executables. This results in larger executables.
완전히 링크된 실행파일에서 재배치 섹션과 내용을 유지한다. 이후 실행파일을 정상적으로 수정하기 위해 링크 분석이나 최적화 도구가 이 정보를 사용할 수 있다. 이는 더 큰 실행파일을 만든다.
-r
--relocateable
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'. This option does the same thing as `-i'.
재배치가능한 출력, 즉 출력파일이 다시 ld의 입력으로 사용될 수 있는 출력을 만든다. 이는 보통 부분 링킹이라 불린다. 또한 시스템이 표준 유닉스 매직넘버를 지원한다면 이 옵션은 출력파일의 매직넘버를 OMAGIC으로 한다. (역주; OMAGIC은 a.out 오브젝트 파일 형식의 일종이다.) 이 옵션이 없다면 절대 파일이 만들어 진다. C++ 프로그램을 링크할 때 이 옵션은 생성자의 참조를 리졸브하지 않는다. 이를 위해서 `-Ur'를 사용하라. 이 옵션은 `-i'와 동일하다.
-R filename
--just-symbols=filename
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. For compatibility with other ELF linkers, if the -R option is followed by a directory name, rather than a file name, it is treated as the -rpath option.
filename에서 심볼 이름과 주소를 읽지만 재배치나 출력에 포함하지는 않는다. 이 옵션으로 출력파일이 다른 프로그램의 메모리 상의 정의된 위치를 심볼로 참조할 수 있다. 이 옵션은 여러번 사용해도 된다. 다른 ELF 링커와 호환을 위해 -R 옵션 다음에 파일이름 대신 디렉토리 이름이 나올 경우 -rpath 옵션으로 취급된다.
-s
--strip-all
Omit all symbol information from the output file.
출력파일에서 모든 심볼 정보를 생략한다.
-S
--strip-debug
Omit debugger symbol information (but not all symbols) from the output file.
출력파일에서 (모든 심볼이 아니라) 디버거 심볼 정보만을 생략한다.
-t
--trace
Print the names of the input files as ld processes them.
처리하는 입력파일 이름을 출력한다.
-T scriptfile
--script=scriptfile
Use scriptfile as the linker script. This script replaces ld's default linker script (rather than adding to it), so commandfile must specify everything necessary to describe the output file. You must use this option if you want to use a command which can only appear once in a linker script, such as the SECTIONS or MEMORY command. See section Linker Scripts. If scriptfile does not exist in the current directory, ld looks for it in the directories specified by any preceding `-L' options. Multiple `-T' options accumulate.
링커 스크립트로 scriptfile을 사용한다. 이 옵션은 기본 링커 스크립트를 (보완하는 것이 아니라) 대체하기 때문에, commandfile은 출력파일을 기술하는데 필요한 모든 것을 담고 있어야 한다. SECTIONSMEMORY 명령어와 같이 링커 스크립트에서 단 한번만 사용될 수 있는 명령어를 사용해야 한다면 이 옵션이 필요하다. Linker Scripts를 참조하라. scriptfile이 현재 디렉토리에 없다면 그 전 `-L' 옵션으로 지정된 디렉토리에서 찾는다. 여러 `-T' 옵션의 내용은 서로 축적된다.
-u symbol
--undefined=symbol
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.
출력파일에 symbol이 정의되지 않은 심볼로 포함되게 한다. 이렇게 하여 예를 들어 표준 라이브러리에서 추가로 모듈을 링크하게 할 수 있다. `-u' 옵션은 여러 정의되지 않은 심볼을 포함하기 위해서 다른 아규먼트로 여러번 사용할 수 있다. 링커 스크립트의 EXTERN 명령어도 같은 기능을 한다.
-Ur
For anything other than C++ programs, this option is equivalent to `-r': it generates relocatable output--i.e., an output file that can in turn serve as input to ld. When linking C++ programs, `-Ur' does resolve references to constructors, unlike `-r'. 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.
C++ 프로그램이 아니면 이 옵션은 재배치가능한 (출력파일을 다시 입력으로 사용할 수 있는) 출력을 생성하는 `-r' 옵션과 동일하다. C++ 프로그램을 링크할 때, `-Ur' 옵션은 `-r'와 다르게 생성자로 참조를 리졸브한다. 이미 `-Ur'로 링크된 파일에 이 옵션은 아무일도 하지 않는다. 한번 생성자표가 만들어지면, 추가될 수 없다. 그래서 마지막 부분 링크에만 `-Ur'를 사용하고, 나머지는 `-r'를 사용한다.
--unique[=SECTION]
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.
SECTION에 대응하는 모든 입력 섹션에 대해서 독립된 출력 섹션을 생성한다. SECTION 아규먼트가 없다면 모든 고아 입력 섹션에 대해서 독립된 출력 섹션을 만든다. 고아 섹션은 링커 스크립트에 명시되지 않은 섹션을 말한다. 이 옵션은 여러번 사용할 수 있다. 이 옵션은 링커 스크립트의 출력 섹션 할당을 무시하고, 입력 섹션을 같은 이름으로 결합하는 것을 막는다.
-v
--version
-V
Display the version number for ld. The -V option also lists the supported emulations.
ld의 버전을 출력한다. -V 옵션은 지원되는 에뮬레이션도 같이 출력한다.
-x
--discard-all
Delete all local symbols.
모든 지역 심볼을 삭제한다.
-X
--discard-locals
Delete all temporary local symbols. For most targets, this is all local symbols whose names begin with `L'.
모든 임시 지역 심볼을 삭제한다. 많은 경우 이름이 `L'로 시작하는 지역 심볼이다.
-y symbol
--trace-symbol=symbol
Print the name of each linked file in which symbol appears. This option may be given any number of times. On many systems it is necessary to prepend an underscore. This option is useful when you have an undefined symbol in your link but don't know where the reference is coming from.
링크할 파일에서 symbol이 발견되면 파일이름을 출력한다. 이 옵션은 여러번 사용할 수 있다. 많은 시스템에서 `_'를 앞에 붙여야한다. 이 옵션은 어디서 참조가 되는지 모르는 정의되지 않은 심볼을 확인할 때 유용하다.
-Y path
Add path to the default library search path. This option exists for Solaris compatibility.
path를 기본 라이브러리 검색 패스에 추가한다. 이 옵션은 Solaris와 호환을 위해 있다.
-z keyword
The recognized keywords are initfirst, interpose, loadfltr, nodefaultlib, nodelete, nodlopen, nodump, now and origin. The other keywords are ignored for Solaris compatibility. initfirst marks the object to be initialized first at runtime before any other objects. interpose marks the object that its symbol table interposes before all symbols but the primary executable. loadfltr marks the object that its filtees be processed immediately at runtime. nodefaultlib marks the object that the search for dependencies of this object will ignore any default library search paths. nodelete marks the object shouldn't be unloaded at runtime. nodlopen marks the object not available to dlopen. nodump marks the object can not be dumped by dldump. now marks the object with the non-lazy runtime binding. origin marks the object may contain $ORIGIN. defs disallows undefined symbols.
가능한 keyword 값은 initfirst, interpose, loadfltr, nodefaultlib, nodelete, nodlopen, nodump, now, origin 이다. 다른 키워드는 Solaris와 호환을 위한 것으로 무시된다. initfirst는 객체가 실행 중 다른 객체 보다 먼저 초기화되도록 표시한다. interpose는 객체의 심볼표를 주 실행파일을 제외한 모든 심볼 전에 포함시킨다. loadfltr는 객체에 실행 중 이 객체로 필터하는 객체가 즉시 처리되게 표시한다. nodefaultlib는 객체의 의존을 검색할 때 기본 라이브러리 검색 패스를 무시하도록 표시한다. nodelete는 객체가 실행 중에 언로드되지 않게 표시한다. nodlopen는 객체가 dlopen로 사용할 수 없게 표시한다. nodump는 객체가 dldump로 덤프될 수 없게 표시한다. now는 객체를 실행 중 레이지바인딩(lazy binding) 하지 않도록 표시한다. origin은 객체가 $ORGIN을 포함할 수 있다고 표시한다. defs는 정의되지 않은 심볼을 허용하지 않는다.
-( archives -)
--start-group archives --end-group
The archives should be a list of archive files. They may be either explicit file names, or `-l' options. 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 all be searched repeatedly until all possible references are resolved. Using this option has a significant performance cost. It is best to use it only when there are unavoidable circular references between two or more archives.
archives는 아카이브 파일의 목록이다. 이는 직접 파일이름이나 `-l' 옵션이다. 주어진 아카이브들은 어떤 새로운 정의되지 않은 참조가 만들어지기 전까지 반복해서 검색된다. 보통 아카이브는 명령행에 주어진 순서로 단 한번만 검색된다. 명령행에서 뒤에 나오는 아카이브의 정의되지 않은 심볼이 앞의 아카이브의 심볼을 참조한다면, 링커는 참조를 리졸브하지 못한다. 이 옵션으로 서로 묶여진 아카이브들은 가능한 모든 참조가 리졸브될 때까지 반복해서 검색된다. 이 옵션은 매우 느리다. 둘 이상의 아카이브 사이에 피할 수 없는 순환참조가 있을 때 유용하다.
-assert keyword
This option is ignored for SunOS compatibility.
이 옵션은 SunOS와 호환을 위해 제공되며 무시된다.
-Bdynamic
-dy
-call_shared
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.
동적 라이브러리로 링크한다. 이 옵션은 공유 라이브러리가 지원되는 플래폼에서만 의미가 있다. 그런 플래폼에서 보통 이 옵션은 기본값이다. 이 옵션의 다른 표현은 여러 시스템과 호환을 위해 있다. 이 옵션은 명령행에서 여러번 사용할 수 있다. 이 옵션 다음에 오는 -l 옵션의 라이브러리 검색에 영향을 준다.
-Bgroup
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. --no-undefined is implied. This option is only meaningful on ELF platforms which support shared libraries.
동적 섹션의 DT_FLAGS_1 항목에 DF_1_GROUP 플래그를 설정한다. 그래서 실행 중 링커가 이 객체와 의존하는 객체에서 검색을 그룹 안에서만 수행되도록 한다. --no-undefined 옵션은 가정된다. 이 옵션은 공유 라이브러리를 지원하는 ELF 플래폼에서만 의미가 있다.
-Bstatic
-dn
-non_shared
-static
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.
동적 라이브러리로 링크하지 않는다. 이 옵션은 공유 라이브러리가 지원되는 플래폼에서만 의미가 있다. 이 옵션의 다른 표현은 여러 시스템과 호환을 위해 있다. 이 옵션은 명령행에서 여러번 사용할 수 있다. 이 옵션 다음에 오는 -l 옵션의 라이브러리 검색에 영향을 준다.
-Bsymbolic
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.
공유 라이브러리를 만들 때 전역 심볼의 참조를 가능하면 공유 라이브러리 안의 정의에 바인드한다. 보통 공유 라이브러리와 링크되는 프로그램은 공유 라이브러리의 정의를 대체하는 것이 가능하다. 이 옵션은 공유 라이브러리를 지원하는 ELF 플래폼에서만 의미가 있다.
--check-sections
--no-check-sections
Asks the linker not to check section addresses after they have been assigned to see if there any overlaps. Normally the linker will perform this check, and if it finds any overlaps it will produce suitable error messages. The linker does know about, and does make allowances for sections in overlays. The default behaviour can be restored by using the command line switch `--check-sections'.
링커가 섹션 주소를 할당한 후 어떤 겹침이 있는지 검사하지 않게 한다. 보통 링커는 이 검사를 하고 겹침이 발견되면 적당한 오류문을 출력한다. 기본값으로 `--check-sections'을 사용하여 되돌릴 수 있다.
--cref
Output a cross reference table. If a linker map file is being generated, the cross reference table is printed to the map file. Otherwise, it is printed on the standard output. 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. The remaining files contain references to the symbol.
교차참조표를 출력한다. 링커맵이 생성된다면 교차참조표는 맵파일에 출력된다. 그렇지 않다면 표준출력에 출력된다. 표의 형식은 의도적으로 간단하여 필요하다면 스크립트로 쉽게 처리할 수 있다. 심볼은 이름으로 정렬하여 출력된다. 각 심볼에 대해서 파일이름 목록도 주어진다. 심볼이 정의되었다면 목록의 첫 파일이 정의한 곳이다. 나머지 파일은 심볼을 참조한 파일들이다.
--defsym symbol=expression
Create a global symbol in the output file, containing the absolute address given by expression. You may use this option as many times as necessary to define multiple symbols in the command line. A limited form of arithmetic is supported for the expression in this context: you may give a hexadecimal constant or the name of an existing symbol, or use + and - to add or subtract hexadecimal constants or symbols. If you need more elaborate expressions, consider using the linker command language from a script (see section Assigning Values to Symbols). Note: there should be no white space between symbol, the equals sign ("="), and expression.
절대 주소 expression을 가지고 출력파일에 전역 심볼을 만든다. 이 옵션을 여러 심볼을 정의하기 위해서 여러번 사용해도 된다. expression에 다음의 제한된 연산이 가능하다. 16 진수 상수나 이미 존재하는 심볼 이름과 이들을 더하거나 빼기 위해서 +, -를 사용할 수 있다. 더 복잡한 연산이 필요하면 링커 명령 언어 스크립트를 (Assigning Values to Symbols 참고) 사용해라. 주의! symbol과 등호 ("="), expression 사이에 공백이 있으면 안된다.
--demangle[=style]
--no-demangle
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.
이 옵션은 오류문이나 출력에서 심볼이름을 디맹글링할지를 결정한다. 링커가 디맹글링한다면 심볼이름을 읽기 쉬운 형식으로 출력하려고 한다. 오브젝트 파일 형식이 앞에 `_'을 사용한다면 제거하고, C++ 맹글링된 심볼 이름을 사람이 읽을 수 있는 이름으로 변환한다. 컴파일러 마다 다른 맹글링 형식을 가지고 있다. 추가로 맹글링 형식 아규먼트로 컴파일러에 적당한 형식을 선택할 수 있다. 링커는 `COLLECT_NO_DEMANGLE' 환경변수가 없다면 기본적으로 디맹글링한다. 이 옵션은 기본값을 대체하기위해 사용된다.
--dynamic-linker file
Set the name of the dynamic linker. This is only meaningful when generating dynamically linked ELF executables. The default dynamic linker is normally correct; don't use this unless you know what you are doing.
동적 링커 이름을 설정한다. 이 옵션은 동적 링크된 ELF 실행파일을 생성할 때만 의미가 있다. 보통 기본 동적 링커를 (역주; Linux에서는 .interp 섹션의 내용인 /lib/ld.so.2) 사용하는 것이 정상이다. 무엇을 하는지 모른다면 사용하지 마라.
--embedded-relocs
This option is only meaningful when linking MIPS embedded PIC code, generated by the -membedded-pic option to the GNU compiler and assembler. It causes the linker to create a table which may be used at runtime to relocate any data which was statically initialized to pointer values. See the code in testsuite/ld-empic for details.
이 옵션은 GNU 컴파일러와 어셈블러의 -membedded-pic 옵션으로 만들어진 MIP 임베디드 PIC 코드를 링크할 때만 의미가 있다. 이 옵션은 링커가 포인터값에 정적으로 초기화한 자료를 재배치하기 위해서 실행 중에 사용될 표를 만들게 한다. 자세한 내용은 testsuite/ld-empic 에 있는 코드를 참조하라.
--force-exe-suffix
Make sure that an output file has a .exe suffix. 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.
출력파일이 .exe 확장자를 가지게 한다. 성공적으로 완전히 링크된 결과파일이 .exe.dll 확장자를 가지지 않는다면, 이 옵션은 결과파일을 같은 이름에 .exe 확장자를 가진 파일로 복사한다. 몇몇 Winodws가 .exe 확장자가 없다면 실행파일을 실행하지 못하지 때문에, 이 옵션은 Microsoft Windows에서 유닉스 makefile을 수정하지 않고 사용할 때 유용하다.
--no-gc-sections
--gc-sections
Enable garbage collection of unused input sections. It is ignored on targets that do not support this option. This option is not compatible with `-r', nor should it be used with dynamic linking. The default behaviour (of not performing this garbage collection) can be restored by specifying `--no-gc-sections' on the command line.
사용되지 않은 입력 섹션의 가비지컬랙션을 가능하게 한다. 이 옵션을 지원하지 않는 컴퓨터에서는 무시된다. 이 옵션은 `-r'과 같이 사용할 수 없고 동적 링크시에도 사용할 수 없다. `--no-gc-sections' 옵션으로 (가비지컬랙션을 하지 않는) 기본 행동으로 돌아올 수 있다.
--help
Print a summary of the command-line options on the standard output and exit.
표준출력에 명령행 옵션을 간단히 출력하고 종료한다.
--target-help
Print a summary of all target specific options on the standard output and exit.
표준출력에 플래폼 특유의 옵션들을 출력하고 종료한다.
-Map mapfile
Print a link map to the file mapfile. See the description of the `-M' option, above.
링크맵을 파일 mapfile에 출력한다. 위에서 `-M' 옵션을 참조하라.
--no-keep-memory
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.
ld는 기본적으로 메모리에 입력파일의 심볼표를 저장하여 (메모리 보다는) 속도에 최적화하여 실행된다. 대신 이 옵션은 필요할 때마다 심볼표를 읽어들여서 메모리 사용을 최소화하게 한다. 이 옵션은 큰 실행파일을 링크할 때 메모리 부족해진다면 필요하다.
--no-undefined
-z defs
Normally when creating a non-symbolic shared library, undefined symbols are allowed and left to be resolved by the runtime loader. These options disallow such undefined symbols.
보통 공유 라이브러리를 만들 때 정의되지 않은 심볼이 허용되고 실행 중 로더가 리졸브하도록 남겨진다. 이 옵션은 이런 정의되지 않은 심볼을 허용하지 않는다.
--allow-shlib-undefined
Allow undefined symbols in shared objects even when --no-undefined is set. The net result will be that undefined symbols in regular objects will still trigger an error, but undefined symbols in shared objects will be ignored. The implementation of no_undefined makes the assumption that the runtime linker will choke on undefined symbols. However there is at least one system (BeOS) where undefined symbols in shared libraries is normal since the kernel patches them at load time to select which function is most appropriate for the current architecture. I.E. dynamically select an appropriate memset function. Apparently it is also normal for HPPA shared libraries to have undefined symbols.
--no-undefined가 설정되 있어도 공유 객체에 정의되지 않은 심볼을 허용한다. 결과적으로 보통 객체의 정의되지 않은 심볼은 오류를 발생하지만, 공유 객체의 정의되지 않은 심볼은 무시된다. no_undefined는 실행 중 링커가 정의되지 않은 심볼을 처리하지 못한다고 가정한다. 그러나 최소한 한 시스템은 (BeOS) 어떤 함수가 현재 아키텍쳐에 적합한지 선택하기 (예를 들어 동적으로 적당한 memset 함수를 선택한다) 위해서 커널이 로딩시 고치기 때문에 공유 라이브러리의 정의되지 않은 심볼은 정상이다. 또한 HPPA 공유 라이브러리도 정의되지 않은 심볼을 가질 수 있다.
--no-warn-mismatch
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.
ld는 입력파일들이 다른 CPU나 endian을 대상으로 컴파일 된 것과 같은 이유로 입력파일들 간에 불일치가 발견되면 오류를 발생한다. 이 옵션은 이런 오류를 조용히 넘어가게 한다. 이 옵션은 링커의 오류가 부적절한 것임이 확실한 경우에만 주의있게 사용해야 한다.
--no-whole-archive
Turn off the effect of the --whole-archive option for subsequent archive files.
다음 아카이브 파일에 --whole-archive 옵션 효과를 제거한다.
--noinhibit-exec
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.
가능한 실행가능한 출력파일을 보존한다. 기본적으로 링커는 링크 과정에서 오류를 만나면 출력파일을 만들지 않는다. 오류를 출력하고 출력파일을 만들지 않고 종료한다.
--oformat output-format
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. See section BFD.
ld는 여러 종류의 오브젝트 파일 형식을 지원하도록 설정될 수 있다. 이렇게 설정되었다면 `--oformat' 옵션으로 출력 오브젝트 파일의 형식을 지정할 수 있다. 각 컴퓨터에 가장 흔한 형식을 기본 출력 형식으로 사용하기 때문에 이 옵션을 항상 사용할 필요는 없다. output-format는 문자열로 BFD 라이브러리가 지원하는 형식의 이름이다. (사용가능한 형식은 `objdump -i'으로 알 수 있다.) 스크립트 명령어 OUTPUT_FORMAT도 출력 형식을 지정하지만, 이 옵션이 우선순위를 가진다. BFD를 참고하라.
-qmagic
This option is ignored for Linux compatibility.
이 옵션은 Linux와 호환을 위한 것으로, 무시된다.
-Qy
This option is ignored for SVR4 compatibility.
이 옵션은 SVR4와 호환을 위한 것으로, 무시된다.
--relax
An option with machine dependent effects. This option is only supported on a few targets. See section ld and the H8/300. See section ld and the Intel 960 family. On some platforms, the `--relax' option performs global optimizations that become possible when the linker resolves addressing in the program, such as relaxing address modes and synthesizing new instructions in the output object file. 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. On platforms where this is not supported, `--relax' is accepted, but ignored.
각 플래폼에 따라 다른 기능을 하는 옵션이다. 이 옵션은 몇 플래폼에서만 지원된다. ld and the H8/300ld and the Intel 960 family를 참고하라. 어떤 플래폼에서 `--relax' 옵션은 출력 오브젝트 파일에서 주소형식을 바꾸거나 새로운 명령어를 합성하는 것과 같이 링커가 주소를 리졸브할 때 가능한 전역 최적화를 수행하게 한다. 어떤 플래폼에서 이 전역 최적화는 결과 파일에서 디버그 심볼을 사용할 수 없게 만든다. 예로 Matsushita MN10200와 MN10300 계열이 그러하다. 기타 플래폼에서 이 옵션은 무시된다.
--retain-symbols-file filename
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' does not discard undefined symbols, or symbols needed for relocations. You may only specify `--retain-symbols-file' once in the command line. It overrides `-s' and `-S'.
filename에 열거된 심볼만 유지하고, 다른 심볼들은 버린다. filename은 단순히 한 줄에 하나의 심볼 이름이 있는 보통 파일이다. 이 옵션은 실행 중 메모리를 절약하기 위해서 큰 전역 심볼표를 점차 축적하는 환경에서 (VxWorks와 같은) 특히 유용하다. 이 옵션은 정의되지 않은 심볼이나 재배치에 필요한 심볼은 버리지 않는다. 이 옵션은 명령행에 한번만 사용할 수 있다. 이 옵션은 `-s'`-S'를 무시한다.
-rpath dir
Add a directory to the runtime library search path. This is used when linking an ELF executable with shared objects. All -rpath arguments are concatenated and passed to the runtime linker, which uses them to locate shared objects at runtime. 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. If -rpath is not used when linking an ELF executable, the contents of the environment variable LD_RUN_PATH will be used if it is defined. The -rpath option may also be used on SunOS. By default, on SunOS, the linker will form a runtime search patch 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 filesystems. For compatibility with other ELF linkers, if the -R option is followed by a directory name, rather than a file name, it is treated as the -rpath option.
디렉토리를 실행 중 라이브러리 검색 패스에 추가한다. 이 옵션은 ELF 실행파일을 공유 라이브러리와 링크할 때 사용한다. 모든 -rpath 아규먼트는 모아져서 실행 중 링커가 공유 객체를 찾는데 사용된다. 또 이 옵션은 링크에 명시적으로 포함될 필요가 있는 공유 객체를 지시하는데도 사용된다. -rpath-link 옵션 설명을 참조하라. ELF 실행파일을 링크할 때 이 옵션이 사용되지 않고 LD_RUN_PATH 환경변수가 정의되있다면 이 환경변수의 내용이 사용된다. 이 옵션은 SunOS에서도 사용할 수 있다. SunOS에서 기본적으로 링커는 주어진 -L 옵션으로 실행 중 검색 패스를 만든다. 이 옵션이 사용되면 -L 옵션은 무시하고, 오직 이 옵션만으로 실행 중 검색 패스를 만든다. 그래서 gcc에서 NFS로 마운트되는 여러 파일시스템을 -L 옵션과 유용하게 사용할 수 있다. 다른 ELF 링커와 호환을 위해 -R 옵션 뒤에 파일이름이 아니라 디렉토리 이름이 올 경우 -rpath 옵션으로 취급한다. (역주; DYNAMIC 세그먼트에 RPATH 타입의 항목을 추가한다. (링크 때가 아니라 실행 중) 현재 디렉토리를 나타내는 '.'도 사용가능하다.)
-rpath-link DIR
When using ELF or SunOS, one shared library may require another. This happens when an ld -shared link includes a shared library as one of the input files. 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, the -rpath-link option specifies the first set of directories to search. The -rpath-link option may specify a sequence of directory names either by specifying a list of names separated by colons, or by appearing multiple times. This 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 use unintentionally a different search path than the runtime linker would do. The linker uses the following search paths to locate required shared libraries.
ELF나 SunOS에서 공유 라이브러리는 다른 공유 라이브러리를 필요로 할 수 있다. 이는 ld -shared로 공유 라이브러리를 입력파일에 포함한 경우에 발생한다. 링커가 공유되지 않고 재배치불가능한 링크를 할 때 이런 의존성을 발견하면 (명시되지 않았어도) 필요한 공유 라이브러리를 찾아서 링크에 포함시키려고 한다. 이 경우 이 옵션은 처음으로 검색할 디렉토리 집합을 지정한다. 이 옵션은 각 이름을 `:'으로 분리하거나 옵션을 여러번 사용하여 일련의 디렉토리를 지정한다. 이 옵션은 공유 라이브러리에 쓰여진 검색 패스를 무효로 할 수 있으므로 주의있게 사용해야 한다. 어떤 경우에 의도하지 않게 실행 중 링커와 다른 검색 패스를 사용할 수도 있다. 링커는 필요한 공유 라이브러리를 찾기 위해 다음 검색 패스를 사용한다.
  1. Any directories specified by -rpath-link options.
  2. Any directories specified by -rpath options. The difference between -rpath and -rpath-link is that directories specified by -rpath options are included in the executable and used at runtime, whereas the -rpath-link option is only effective at link time. It is for the native linker only.
  3. On an ELF system, if the -rpath and rpath-link options were not used, search the contents of the environment variable LD_RUN_PATH. It is for the native linker only.
  4. On SunOS, if the -rpath option was not used, search any directories specified using -L options.
  5. For a native linker, the contents of the environment variable LD_LIBRARY_PATH.
  6. For a native ELF linker, the directories in DT_RUNPATH or DT_RPATH of a shared library are searched for shared libraries needed by it. The DT_RPATH entries are ignored if DT_RUNPATH entries exist.
  7. The default directories, normally `/lib' and `/usr/lib'.
  8. For a native linker on an ELF system, if the file `/etc/ld.so.conf' exists, the list of directories found in that file.
If the required shared library is not found, the linker will issue a warning and continue with the link.
  1. -rpath-link 옵션으로 지정된 디렉토리들
  2. -rpath 옵션으로 지정된 디렉토리들. -rpath-rpath-link의 차이는 -rpath는 실행파일에 포함되고 실행 중에 사용되는 반면 -rpath-link는 오직 링크 시에 사용된다는 점이다. 이는 기본 링커에만 적용된다.
  3. ELF 시스템에서 -rpath-rpath-link 옵션이 사용되지 않았다면 환경변수 LD_RUN_PATH의 내용을 검색한다. 이는 기본 링커에만 적용된다.
  4. SunOS에서 -rpath가 사용되지 않았다면 -L 옵션으로 주어진 디렉토리를 검색한다.
  5. 기본 링커에서 환경변수 LD_LIBRARY_PATH의 내용
  6. 기본 ELF 링커에서 공유 라이브러리의 DT_RUNPATHDT_RPATH에 저장된 디렉토리가 검색된다. DT_RUNPATH 항목이 있다면 DT_RPATH 항목은 무시된다.
  7. 보통 `/lib'`/usr/lib' 같은 기본 디렉토리
  8. ELF 시스템의 기본 링커에서 파일 `/etc/ld.so.conf'이 존재한다면 이 파일 안의 디렉토리 목록
필요한 공유 라이브러리가 발견되지 않으면 링커는 경고를 출격하고 링크를 계속한다.
-shared
-Bshareable
Create a shared library. This is currently only supported on ELF, XCOFF and SunOS platforms. On SunOS, the linker will automatically create a shared library if the -e option is not used and there are undefined symbols in the link.
공유 라이브러리를 만든다. 이 옵션은 현재 ELF, XCOFF, SunOS 플래폼에서만 지원된다. SunOS에서 -e 옵션이 사용되지 않고 링크에 정의되지 않은 심볼이 있다면 링커는 자동으로 공유 라이브러리를 만든다.
--sort-common
This option tells ld to sort the common symbols by size when it places them in the appropriate output sections. First come all the one byte symbols, then all the two bytes, then all the four bytes, and then everything else. This is to prevent gaps between symbols due to alignment constraints.
이 옵션은 ld가 공통 심볼을 적당한 출력 섹션에 위치할 때 크기 순으로 정렬하게 한다. 1 바이트 심볼들은 처음에 나오고, 다음에 2 바이트의, 다음에 4 바이트의, 등등. 그래서 정렬 제한으로 인한 심볼사이의 공간을 줄인다.
--split-by-file [size]
Similar to --split-by-reloc but creates a new output section for each input file when size is reached. size defaults to a size of 1 if not given.
--split-by-reloc과 비슷하지만, 각 입력파일에 대해서 size를 넘을 때마다 새로운 출력 섹션을 만든다. size이 주어지지 않으면 1이 사용된다.
--split-by-reloc [count]
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.
출력파일에 별도의 섹션을 만들어서 각 출력 섹션에 재배치가 count 이상을 포함하지 않도록 한다. 이는 COFF 형식이 한 섹션에 재배치를 65535개 이상 포함하지 못하기 때문에, COFF를 사용하는 리얼타임 커널에 다운로드할 큰 재배치가능 파일을 생성할 때 유용하다. 주의! 이 옵션은 임의의 섹션을 지원하지 않는 오브젝트 파일 형식과 함께 사용될 수 없다. 링커는 입력 섹션 자체를 나누지는 않는다. 그래서 입력 섹션의 재배치가 count 개 이상이더라도 그대로 출력 섹션에 쓰여진다. 기본 count 값은 32768이다.
--stats
Compute and display statistics about the operation of the linker, such as execution time and memory usage.
실행 시간이나 메모리 사용량과 같은 링커 실행에 대한 통계를 출력한다.
--traditional-format
For some targets, the output of ld is different in some ways from the output of some existing linker. This switch requests ld to use the traditional format instead. 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.
어떤 플래폼에서 ld의 출력 방식이 이미 존재하는 링커와 다를 수 있다. 이 옵션은 ld가 대신 전통적인 형식을 사용하게 한다. SunOS의 예를 들면, ld는 심볼문자열표에 반복되는 항목을 포함한다. 그래서 많은 디버깅 정보를 가진 출력파일의 크기를 30% 이상 줄인다. 그러나 SunOS의 dbx는 이 결과를 읽을 수 없다. (gdb는 문제없다.) 이 경우 `--traditional-format' 옵션은 반복되는 항목을 합치지 않게 한다.
--section-start sectionname=org
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.
섹션을 절대 주소 org에 위치한다. 이 옵션을 서로 다른 섹션에 대해서 여러번 사용할 수 있다. 다른 링커와 호환을 위해 org는 16 진수 정수이다. 보통 16 진수값과 같이 쓰이는 앞의 `0x'는 생략이 가능하다. 주의: sectionname과 등호 ("="), org 사이에 공백이 있으면 안된다.
-Tbss org
-Tdata org
-Ttext org
Use org as the starting address for--respectively--the bss, data, or the text segment of the output file. org must be a single hexadecimal integer; for compatibility with other linkers, you may omit the leading `0x' usually associated with hexadecimal values.
org을 출력파일에서 각각 bss, data, text 부분의 시작 주소로 사용한다. 다른 링커와 호환을 위해 org는 16 진수 정수이다. 보통 16 진수값과 같이 쓰이는 앞의 `0x'는 생략이 가능하다.
--dll-verbose
--verbose
Display the version number for ld and list the linker emulations supported. Display which input files can and cannot be opened. Display the linker script if using a default builtin script.
ld의 버전과 지원하는 링커 에뮬레이션을 출력한다. 입력파일을 열 수 있는지 없는지도 출력한다. 기본 스크립트를 사용한다면 링커 스크립트도 출력한다.
--version-script=version-scriptfile
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 heirarchy for the library being created. This option is only meaningful on ELF platforms which support shared libraries. See section VERSION Command.
버전 스크립트 이름을 지정한다. 이는 공유 라이브러리에 라이브러리 버전 계층구조에 대한 추가 정보를 저장할 때 보통 사용한다. 이 옵션은 공유 라이브러리를 지원하는 ELF 플래폼에서만 의미가 있다. VERSION Command를 참조하라.
--warn-common
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. There are three kinds of global symbols, illustrated here by C examples:
공통 심볼이 다른 공통 심볼이나 심볼 정의와 결합될 때 경고한다. 유닉스 링커는 이 다소 이상한 일을 허용하지만, 다른 운영체제의 링커는 그렇지 않다. 이 옵션은 전역 심볼을 결합할 때 발생할 수 있는 잠제적 문제를 찾는데 도움이 된다. 불행히도 몇몇 C 라이브러리는 이런 관행을 이용하기 때문에 프로그램이 아니라 라이브러리의 심볼에 대한 경고도 얻을 수 있다.
`int i = 1;'
A definition, which goes in the initialized data section of the output file.
`extern int i;'
An undefined reference, which does not allocate space. There must be either a definition or a common symbol for the variable somewhere.
`int i;'
A common symbol. If there are only (one or more) common symbols for a variable, it goes in the uninitialized data area of the output file. The linker merges multiple common symbols for the same variable into a single symbol. If they are of different sizes, it picks the largest size. The linker turns a common symbol into a declaration, if there is a definition of the same variable.

`int i = 1;'
정의는 출력파일의 초기화된 자료 섹션에 저장된다.
`extern int i;'
공간을 할당하지 않는 정의되지 않은 참조이다. 반드시 다른 곳에 변수의 정의나 공유 심볼이 있어야 한다.
`int i;'
공통 심볼이다. 변수에 대해서 오직 공통 심볼만이 있다면 출력파일의 초기화되지않은 자료 섹션에 저장된다. 링커는 같은 변수의 여러 공통 심볼을 한 심볼로 합친다. 그들이 서로 다른 크기를 가지면 가장 큰 크기를 선택한다. 같은 변수의 정의가 있다면 링커는 공통 심볼을 같은 선언으로 변환한다.
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.
`--warn-common' 옵션은 다섯 가지 종류의 경고를 출력한다. 각 경고는 두 줄이다. 첫 줄은 발견된 심볼을, 두번째 줄은 같은 이름으로 이미 발견한 심볼을 설명한다. 두 심볼 중 하나 이상이 공통 심볼이다.
  1. Turning a common symbol into a reference, because there is already a definition for the symbol.
    file(section): warning: common of `symbol'
       overridden by definition
    file(section): warning: defined here
    
  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. Merging a common symbol with a previous same-sized common symbol.
    file(section): warning: multiple common
       of `symbol'
    file(section): warning: previous common is here
    
  4. Merging a common symbol with a previous larger common symbol.
    file(section): warning: common of `symbol'
       overridden by larger common
    file(section): warning: larger common is here
    
  5. Merging a common symbol with a previous smaller common symbol. This is the same as the previous case, except that the symbols are encountered in a different order.
    file(section): warning: common of `symbol'
       overriding smaller common
    file(section): warning: smaller common is here
    

  1. 심볼에 대한 정의가 이미 있기 때문에 공통 심볼을 참조로 변환한다.
    file(section): warning: common of `symbol'
       overridden by definition
    file(section): warning: defined here
    
  2. 나중에 심볼에 대한 정의가 발견되었기 때문에 공통 심볼을 참조로 변환한다. 이는 심볼이 반대 순서로 발견된 것을 제외하고 전의 경우와 같다.
    file(section): warning: definition of `symbol'
       overriding common
    file(section): warning: common is here
    
  3. 공통 심볼을 전의 같은 크기의 공통 심볼과 합친다.
    file(section): warning: multiple common
       of `symbol'
    file(section): warning: previous common is here
    
  4. 공통 심볼을 전의 더 큰 공통 심볼과 합친다.
    file(section): warning: common of `symbol'
       overridden by larger common
    file(section): warning: larger common is here
    
  5. 공통 심볼을 전의 더 큰 공통 심볼과 합친다. 이는 심볼이 반대 순서로 반견된 것을 제외하고 전의 경우와 같다.
    file(section): warning: common of `symbol'
       overriding smaller common
    file(section): warning: smaller common is here
    
--warn-constructors
Warn if any global constructors are used. This is only useful for a few object file formats. For formats like COFF or ELF, the linker can not detect the use of global constructors.
어떤 전역 생성자가 사용되면 경고한다. 몇몇 오브젝트 파일 형식에만 유용하다. 링커는 COFF나 ELF 같은 형식에서 전역 생성자 사용을 발견하지 못한다.
--warn-multiple-gp
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.
출력 파일에 여러 전역 포인터값이 필요하다면 경고한다. 이는 Alpha와 같은 특정 프로세서에만 의미가 있다. 어떤 프로세서는 특별한 섹션에 큰 값의 상수를 집어넣을 수 있다. 특별 레지스터(GP, 전역 포인터)는 이 섹션의 중앙을 가리켜서 베이스 레지스터 상대 주소 형식으로 상수를 효율적으로 읽어들일 수 있다. 베이스 레지스터 상대 주소 형식에서 옵셋은 변하지않고 상대적으로 작기 때문에 (예를 들어 16 비트), 이 옵션은 상수풀(pool)의 최대 크기를 제한한다. 그래서 큰 프로그램에서는 모든 상수의 주소를 지시하기 위해서 전역 포인터값을 여러개 사용할 필요가 있다. 이 옵션은 이런 경우가 발생할 때 경고를 낸다.
--warn-once
Only warn once for each undefined symbol, rather than once per module which refers to it.
정의되지 않은 심볼에 대해서 이를 참조하는 모듈 마다 경고하지 않고 각 심볼 당 한번만 경고한다.
--warn-section-align
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 (see section SECTIONS command).
정렬때문에 출력 섹션 주소가 변경되면 경고한다. 보통 정렬은 입력 섹션에서 지정된다. 주소가 명시적으로 지정되지 않았다면, 즉 SECTIONS 명령어가 섹션의 시작 주소를 지정하지 않았다면, 주소를 변경한다. (SECTIONS command를 참조하라.)
--whole-archive
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.
이 옵션 뒤에 나오는 아카이브에서 필요한 오브젝트 파일만을 찾지 않고 아카이브의 모든 오브젝트 파일을 포함한다. 이는 보통 아카이브 파일을 공유 라이브러리로 변환할 때 모든 객체를 공유 라이브러리에 포함시키기 위해서 쓰인다. 이 옵션은 여러번 사용할 수 있다.
--wrap symbol
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. Here is a trivial example:
symbol에 대한 래퍼(wrapper) 함수를 사용한다. symbol로 정의되지 않은 참조는 __wrap_symbol로 리졸브된다. __real_symbol로 정의되지 않은 참조는 symbol로 리졸브된다. 이 옵션은 시스템 함수에 래퍼를 제공하기 위해서 사용된다. 래퍼 함수는 __wrap_symbol로 호출된다. 시스템 함수를 사용하고 싶다면 __real_symbol을 호출하면 된다. 여기 간단한 예가 있다.
void *
__wrap_malloc (int c)
{
  printf ("malloc called with %ld\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.
이 파일을 --wrap malloc을 사용하여 다른 코드와 링크하면 모든 malloc 호출은 대신 __wrap_malloc을 호출한다. __wrap_malloc에서 __real_malloc은 실제 malloc 함수를 호출한다. __real_malloc 함수도 만들어서 --wrap 옵션 없이도 링크가 성공하게 할 수 있다. 만약 그렇다면 __real_malloc의 정의를 __wrap_malloc과 같은 파일에 넣지마라. 그렇다면 링커가 이를 malloc으로 래퍼하기 전에 어셈블러가 호출을 가로채서 먼저 리졸브할 수 있다.
--enable-new-dtags
--disable-new-dtags
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 dynamic tags will be created as needed. 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.
링커는 ELF에 새로운 동적 태그를 만들 수 있다. 그러나 오래된 ELF 시스템은 이를 이해하지 못할 수 있다. --enable-new-dtags를 사용하면 필요한 동적 태그가 만들어 진다. --disable-new-dtags를 사용하면 어떠한 새로운 동적 태그도 만들지 않는다. 기본적으로 새로운 동적 태그는 만들지 않는다. 이 옵션은 ELF 시스템에서 제공된다.

i386 PE 플래폼 특유의 옵션

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).

i386 PE (역주, win32 portable executable 실행파일 형식) 링커는 출력이 보통 실행파일 대신에 동적 링크 라이브러리로 (DLL) 만드는 -shared 옵션을 지원한다. 이 옵션을 사용할 때 출력 이름을 *.dll로 해야 한다. 추가로 오브젝트 파일과 같이 링커 명령행에 사용할 수 있는 표준 *.def 파일도 지원한다. (보통 오브젝트 파일과 같이 링크되려면 심볼을 익스포트하는 아카이브 전에 위치해야 한다.)

In addition to the options common to all targets, the i386 PE linker support additional command line options that are specific to the i386 PE target. Options that take values may be separated from their values by either a space or an equals sign.

모든 플래폼에 공통인 옵션에 추가로 i386 PE 링커 특유의 옵션이 있다. 값을 받는 옵션은 값과 공백이나 등호로 연결된다.

--add-stdcall-alias
If given, symbols with a stdcall suffix (@nn) will be exported as-is and also with the suffix stripped.
이 옵션이 사용되면 stdcall 접미사를 (@nn) 가진 심볼은 그대로 익스포트되며 접미사는 제거된다.
--base-file file
Use file as the name of a file in which to save the base addresses of all the relocations needed for generating DLLs with `dlltool'.
`dlltool'로 DLL를 생성하할 때 파일 file에 저장된 재배치 기본 주소를 사용한다.
--dll
Create a DLL instead of a regular executable. You may also use -shared or specify a LIBRARY in a given .def file.
보통 실행파일 대신에 DLL을 생성한다. 이 옵션 대신에 -shared.def 파일에서 LIBRARY를 지정해도 된다.
--enable-stdcall-fixup
--disable-stdcall-fixup
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.
링크가 리졸브 할 수 없는 심볼을 발견하면 심볼 이름 형식에서만 (cdecl 대 stdcall) 차이가 나는 정의된 다른 심볼을 찾아서 링크하려고 시도한다. 예를 들어 정의되지 않은 심볼 _foo은 함수 _foo@12에, 정의되지 않은 심볼 _bar@16는 함수 _bar로 링크될 수 있다. 이런 경우 보통 링크는 찾지못하기 때문에 경고를 출력한다. 그러나 다른 회사의 dll로 생성한 라이브러리를 임포트하는 경우 이 기능이 유용할 수 있다. --enable-stdcall-fixup이 사용되면 이 기능이 작동하고 경고는 출력되지 않는다. --disable-stdcall-fixup이 사용되면 이 기능은 작동하지 않고, 이런 불일치는 오류로 간주된다.
--export-all-symbols
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, and impure_ptr will not be automatically exported.
이 옵션이 사용되면 DLL을 만드는데 쓰인 객체의 모든 전역 심볼이 DLL에서도 익스포트된다. 주의! 기본적으로 어떤 심볼도 익스포트되지 않는다. 이 옵션이 사용되지 않는다면 기본적으로 DEF 파일에서 명시적으로 익스포트하거나 함수 속성으로 암시적으로 익스포트된 심볼 외에는 익스포트되지 않는다. 주의! DllMain@12, DllEntryPoint@0, impure_ptr는 자동으로 익스포트되지 않는다.
--exclude-symbols symbol,symbol,...
Specifies a list of symbols which should not be automatically exported. The symbol names may be delimited by commas or colons.
자동으로 익스포트되면 안되는 심볼의 목록을 지정한다. 심볼 이름은 `,'나 `:'으로 구분된다.
--file-alignment
Specify the file alignment. Sections in the file will always begin at file offsets which are multiples of this number. This defaults to 512.
파일 정렬 설정한다. 파일의 섹션은 항상 이 수의 배수가 되는 옵션에서 시작한다. 기본값은 512이다.
--heap reserve
--heap reserve,commit
Specify the amount of memory to reserve (and optionally commit) to be used as heap for this program. The default is 1Mb reserved, 4K committed.
프로그램에서 힙으로 예약된 메모리 양을 (또 선택적으로 초기값) 정한다. 기본으로 힙으로 예약하는 메모리는 1Mb이고 초기값은 4K이다.
--image-base value
Use value as the base address of your program or dll. This is the lowest memory location that will be used when your program or dll is loaded. To reduce the need to relocate and improve performance of your dlls, each should have a unique base address and not overlap any other dlls. The default is 0x400000 for executables, and 0x10000000 for dlls.
프로그램이나 dll의 기본 주소로 value를 사용한다. 이는 프로그램이나 dll을 읽어들이는데 사용할 최소 메모리 주소이다. 재배치할 필요를 없애고 dll 성능을 향상시키려면 서로 다른 기본 주소를 가지고 다른 dll과 겹치면 안된다. 기본값으로 실행파일은 0x400000, dll은 0x10000000이다.
--kill-at
If given, the stdcall suffixes (@nn) will be stripped from symbols before they are exported.
심볼이 익스포트되기 전에 stdcall 접미사 (@nn)는 제거된다.
--major-image-version value
Sets the major number of the "image version". Defaults to 1.
"image version"의 major number를 지정한다. 기본값은 1이다.
--major-os-version value
Sets the major number of the "os version". Defaults to 4.
"os version"의 major number를 지정한다. 기본값은 4이다.
--major-subsystem-version value
Sets the major number of the "subsystem version". Defaults to 4.
"subsystem version"의 major number를 지정한다. 기본값은 4이다.
--minor-image-version value
Sets the minor number of the "image version". Defaults to 0.
"image version"의 minor number를 지정한다. 기본값은 0이다.
--minor-os-version value
Sets the minor number of the "os version". Defaults to 0.
"os version"의 minor number를 지정한다. 기본값은 0이다.
--minor-subsystem-version value
Sets the minor number of the "subsystem version". Defaults to 0.
"subsystem version"의 minor number를 지정한다. 기본값은 0이다.
--output-def file
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.
링커가 생성하는 DLL에 해당하는 DEF 파일을 저장할 파일 file을 만든다. 이 DEF 파일은 (*.def) dlltool로 임포트 라이브러리를 만들거나, 자동 혹은 암시적으로 익스포트된 심볼을 참조할 때 사용된다.
--section-alignment
Sets the section alignment. Sections in memory will always begin at addresses which are a multiple of this number. Defaults to 0x1000.
섹션 정렬을 설정한다. 메모리에 섹션은 항상 이 수의 배수인 주소에서 시작한다. 기본값은 0x1000이다.
--stack reserve
--stack reserve,commit
Specify the amount of memory to reserve (and optionally commit) to be used as stack for this program. The default is 32Mb reserved, 4K committed.
프로그램에서 스택으로 예약된 메모리 양을 (또 선택적으로 초기값) 정한다. 기본적으로 스택에 예약된 메모리는 32Mb이고 초기값은 4K이다.
--subsystem which
--subsystem which:major
--subsystem which:major.minor
Specifies the subsystem under which your program will execute. The legal values for which are native, windows, console, and posix. You may optionally set the subsystem version also.
프로그램이 실행될 서브시스템을 지정한다. which에 사용가능한 값은 native, windows, console, posix이다. 또한 선택적으로 서브시스템 버전을 설정할 수도 있다.

환경변수

You can change the behavior of ld with the environment variables GNUTARGET, LDEMULATION, and COLLECT_NO_DEMANGLE.

ld의 행동을 환경변수 GNUTARGET, LDEMULATION, 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 (see section BFD). 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.
GNUTARGET`-b' (나 `--format') 옵션이 사용되지 않은 경우 입력파일의 형식을 지정한다. 이 값은 입력 형식에 대한 BFD 이름이어야 한다. (BFD를 참조하라.) 만약 GNUTARGET 환경변수가 없다면 플래폼의 기본 형식을 사용한다. GNUTARGETdefault로 설정되었다면 BFD는 입력파일을 살펴보고 형식을 알아내려고 시도한다. 보통 이 방법은 성공하나 매직넘버가 오브젝트 파일 형식을 결정하지 못하여 모호할 경우도 있다. 그러나 각 시스템에서 BFD를 설정할 때 자주 사용되는 형식을 검색 목록 앞에 위치하여 모호함을 해결한다.

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.
LDEMULATION`-m' 옵션이 사용되지 않았을 때 기본 에뮬레이션을 지정한다. 에뮬레이션은 링커의 여러 행동에, 특히 기본 링커 스크립트에 영향을 준다. 사용 가능한 에뮬레이션은 `--verbose'`-V' 옵션으로 확인할 수 있다. `-m' 옵션을 사용하지 않고 환경변수 LDEMULATION가 없다면 링커가 구성된 방법에 따라 기본 에뮬레이션이 결정된다.

Normally, the linker will default to demangling symbols. However, if COLLECT_NO_DEMANGLE is set in the environment, then it will default to not demangling symbols. This environment variable is used in a similar fashion by the gcc linker wrapper program. The default may be overridden by the `--demangle' and `--no-demangle' options.
보통 링커는 기본적으로 심볼을 디맹글링한다. 그러나 환경변수 COLLECT_NO_DEMANGLE가 있다면 자동으로 심볼을 디맹글링하지 않는다. gcc(링커 래퍼 프로그램)도 이 환경변수를 사용한다. 기본값은 `--demangle'`--no-demangle'로 무시할 수 있다.


Go to the first, previous, next, last section, table of contents.