LD(1)

명칭
ld - GNU 링커 LD 의 사용법

서식
ld [options] objfile ...

해설
ld 는, 몇개의 오브젝트 파일과 archive파일을 결합해, 그 데이터를 재배치해, 심볼의 참조를 묶습니다. 통상, 프로그램의 컴파일의 최종 단계가, ld 를 실행하는 것입니다.

ld 는, 링크 처리를 명시적 또한 통합적으로 제어하기 위해서, AT&T 의 링크 에디터 명령어의 문법의 상위 호환 세트로 기술된 링커 명령어의 파일을 받아들입니다.

이 메뉴얼 페이지에서는 명령어에 대해 접하지 않습니다. 명령어의 상세와 GNU 링커의 다른 측면으로부터의 상세한 것에 대하여는 "info" 의 ld 의 항, 또는 메뉴얼 ld: the GNU linker 를 참조해 주세요.

이 버젼의 ld 는, 오브젝트 파일의 조작에 범용의 BFD 프로그램 라이브러리를 사용합니다. 이것에 의해 ld 는, 많은 다른 형식 --- 예를 들면 COFF 나 "a.out" 와 같은 오브젝트 파일 --- 의 읽어들여, 결합, 기입을 할 수 있게 되어 있습니다. 다른 형식의 파일을 함께 링크 해, 임의의 이용 가능한 오브젝트 파일을 생성할 수 있습니다.

그 유연성 외에도, GNU 링커는, 진단 정보의 제공이라고 하는 점으로 다른 링커보다 도움이 됩니다. 많은 링커는, 에러를 일으킨 시점에서 즉석에서 실행을 중단해 버립니다만, ld 는 가능한 한 실행을 계속하므로, 다른 에러도 밝혀내는 것이 할 수 있습니다. (또, 경우에 따라서는, 에러에도 불구하고 출력 파일을 생성합니다).

GNU 링커 ld 는, 넓은 범위의 각종 상황에 대응하는 것, 그리고 다른 링커와의 호환성을 가능한 한 유지하는 것을 목표로 하고 있습니다. 그 때문에, 그 동작을 제어하기 위한 많은 선택사항이 있습니다.

옵션
이 링커는, 엄청난 양의 명령행 옵션을 갖추고 있습니다만, 실제로는, 어떠한 국면에 있어도 사용되는 옵션은, 조금 밖에 없습니다. 예를 들면, ld 가 잘 사용되는 것은, Unix 의 표준의 오브젝트 파일을, ld 가 서포트하는 표준의 Unix 시스템상에서 링크 하는 경우입니다. 그러한 시스템상에서는, "hello.o" 라고 하는 파일을 링크 하기 위해서는 이하와 같이 합니다:

        ld -o I<output> /lib/crt0.o hello.o -lc
이것은, "/lib/crt0.o" 와 "hello.o", 그리고 표준으로 검색되는 디렉토리에 있는 프로그램 라이브러리 "libc.a" 를 링크 해, output 라는 이름의 파일을 생성하는 것을 ld 에 대해 지시하고 있습니다.

ld 에 대한 몇개의 명령행 옵션은, 커멘드 라인의 어디서에서도 지정할 수 있습니다. 그러나, 파일을 참조하는 -l 나 -T 와 같은 옵션은, 오브젝트 파일이나 그 외의 파일 옵션에 관련하고 있어, 명령행중에 옵션이 나타난 시점에서 파일을 읽습니다. 파일을 취하지 않는 옵션을 다른 인수를 지정해 반복이라고도, 그 이상 영향이 없는지, 혹은 (명령행상에서 왼쪽에 있다) 지금까지의 지정을 덧쓰기합니다. 2 회 이상 지정해도 의미가 있는 옵션은, 이하의 설명 중(안)에서 기술되고 있습니다.

옵션 인수는 아닌 것은, 함께 링크 되는 오브젝트 파일인가 아카이브(archive)입니다. 그것들은, 옵션과 그 옵션의 인수의 사이에 접어들지 않는 이상 명령행 옵션의 전에 두어도, 뒤로 두어도, 혼합해 지정해도 상관하지 않습니다.

통상, 링커는 적어도 1 개의 오브젝트 파일을 지정해 기동됩니다만, -l 나 -R 를 이용해, 또는 스크립 코맨드 언어 사용해, 다른 바이너리 형식의 입력 파일을 지정할 수가 있습니다. 바이너리 입력 파일이 전혀 지정되지 않았던 경우, 링커는 아무것도 출력을 하지 않고, No input files 라고 하는 메세지를 보냅니다.

링커가 오브젝트 파일의 형식을 인식할 수 없었던 때는, 그것을 링커 스크립트와 가정합니다. 이와 같이 지정된 스크립트는, 링크에 사용되는 주링커 스크립트 (디폴트의 링커 스크립트, 혹은 -T 로 지정된 스크립트)에 추가됩니다. 이 기능에 의해, 일견 오브젝트 파일 혹은 아카이브(archive)로 보이지만, 실제는 단지 심볼치를 정의하고 있을 뿐(만큼)이었거나, "INPUT" 나 "GROUP" 를 사용해 다른 오브젝트를 읽어들이고 있을 뿐의 파일을 링크 할 수가 있습니다. 이와 같이 지정된 스크립트는, 주링커 스크립트에 단지 추가될 뿐(만큼)이라고 하는 것에 주의해 주세요. 디폴트의 링커 스크립트를 완전하게 옮겨놓는 경우는, -T 옵션을 사용해 주세요.

1 캐릭터의 이름을 가지는 옵션의 인수는, 사이에 공백이 들어가지 않고 옵션 캐릭터에 계속되는지, 그 인수가 필요한 옵션의 바로 후에, 독립한 인수로서 주어질까 하지 않으면 안됩니다.

복수 캐릭터의 이름을 가지는 옵션은, 1 개(살), 또는 2 개의 데쉬의 어느 쪽의 뒤에 이어도 상관하지 않습니다. 예를 들면, -trace-symbol 와 --trace-symbol 는 등가입니다. 이 룰에는 1 개만 예외가 있는 것에 주의해 주세요. 소문자의 'o'로 시작되는 복수 캐릭터의 옵션은, 2 개의 데쉬의 뒤밖에 계속되지 않습니다. 이것은, -o 옵션과의 혼란을 줄이기 (위해)때문입니다. 그러니까, 예를 들면 -omagic 는 출력 파일명을 magic 으로 하는데 대해, --omagic 는 출력에 NMAGIC 플래그를 설정합니다.

복수 캐릭터의 옵션에의 인수는, 등호 기호가 옵션과의 사이에 접어드는지, 그 인수를 필요로 하는 옵션의 바로 후에, 독립한 인수로서 주어질까 하지 않으면 안됩니다. 예를 들면, --trace-symbol foo 와 --trace-symbol=foo 는 등가입니다. 복수 캐릭터의 옵션을, 일의에 정해지도록(듯이) 생략 해도, 받아들일 수 있습니다.

링커가 컴파일러 드라이버 (예를 들면 gcc)에 의해 간접적으로 기동되는 경우, 모든 링커의 명령행 옵션은, -Wl, (혹은 특정의 컴파일러 드라이버의 적절한 옵션) 에 이어 이하와 같이 지정되지 않으면 안됩니다:

          gcc -Wl, --startgroup foo.o bar.o -Wl, --endgroup
이것은 중요합니다. 그렇다고 하는 것도, 이와 같이 하지 않으면 컴파일러 드라이버 프로그램은 아무것도 말하지 않고 링커 옵션을 떨어뜨려 버려, 링크가 올바르고 행해지지 않게 되어 버리기 때문입니다.

이하는, GNU 링커가 받아들이는 일반적인 명령행 스윗치의 일람입니다:

-akeyword
    이 옵션은, HP/UX 와의 호환성을 위해서(때문에) 서포트되고 있습니다. keyword 인수는, 캐릭터 라인 archive, shared 또는 default 의 어떤 것인가 나오지 않으면 안됩니다. -aarchive 는, 기능적으로는 -Bstatic 와 등가이며, 나머지의 2 개의 keyword 는, 기능적으로 -Bdynamic 와 등가입니다. 이 옵션은 몇 번이라도 사용할 수가 있습니다.

-Aarchitecture
--architecture=architecture
    현재 릴리스 되고 있는 ld 에서는, 이 옵션은 Intel 960 패밀리의 아키텍쳐에서만 사용됩니다. 그러한 ld 의 구성에서는, architecture 인수는, 960 패밀리의 특정의 아키텍쳐를 지정해, 몇개의 보호 수단을 유효하게 해, 아카이브(archive) 프로그램 라이브러리의 검색 패스를 수정합니다.

    장래의 ld 의 릴리스에서는, 다른 아키텍쳐 패밀리라도 같은 기능을 서포트할지도 모릅니다.

-b input-format
--format=input-format
    ld 는, 1 종류 이상의 오브젝트 파일을 서포트하도록(듯이) 구성할 수가 있습니다. 만약 ld 가 그처럼 구성되어 있다면, -b 옵션으로 입력하는 오브젝트 파일의 바이너리 형식을 지정할 수가 있습니다. 그 입력 파일은, 명령행상에서 이 옵션에 이어 지정합니다. 비록 ld 가, 다른 오브젝트 형식을 서포트하도록(듯이) 설정되어 있어도, 통상 이 옵션을 지정할 필요는 없습니다. 그렇다고 하는 것도, ld 는, 각각 머신상에서 가장 일반적인 형식이 디폴트의 입력 형식이다고 기대하도록(듯이) 설정되어 있기 때문입니다. input-format 는 텍스트 캐릭터 라인으로, BFD 프로그램 라이브러리로 서포트되고 있는 특정의 형식명입니다 (objdump -i 로, 사용 가능한 바이너리 형식명의 리스트를 얻을 수 있습니다).

    파일을 통상이 아닌 바이너리 형식과 링크 하고 싶은 경우에, 이 옵션을 사용할 수가 있습니다. (다른 형식의 오브젝트 파일과 링크 할 때에)(와)과 같이 -b 로 명시적으로 형식을 교체됩니다. 그 경우는 -b input-format 를 특정의 형식의 오브젝트 파일의 각 그룹의 앞에서 지정합니다.

    디폴트의 형식은, 환경 변수 "GNUTARGET" 로부터 취득됩니다.

    스크립트로부터 입력 형식을 지정하는 일도 할 수 있어 그 경우는 명령 "TARGET" 를 사용합니다.

-c MRI-commandfile
--mri-script=MRI-commandfile
    MRI 제의 링커와의 호환성이기 때문에, ld 는, GNU ld 문서의 MRI 호환 스크립트 파일의 장에 기술되고 있는 하나 더의 제한된 명령어로 쓰여졌다 스크립트 파일을 받아들입니다. 옵션 -c 로 MRI 스크립트 파일을 도입했을 경우는, -T 옵션을 이용하는 것으로, 범용 목적의 ld 스크립트 언어로 쓰여진 링커 스크립트를 달리게 할 수가 있습니다. MRI-commandfile 가 없었던 경우, ld 는, -L 로 지정되었다 모든 디렉토리를 찾습니다.

-d
-dc
-dp 이러한 3 개의 옵션은 등가입니다. 다른 링커와의 호환성을 위해서(때문에) 복수의 형식이 서포트되고 있습니다. 재배치 가능한 파일을 출력하도록(듯이) (-r 에 의해) 지정되었을 경우에서도, 코먼 심볼에 공간을 할당합니다. 스크립 코맨드의 "FORCE_COMMON_ALLOCATION" 도 같은 효과를 가집니다.

-e entry
--entry=entry
    프로그램의 실행 개시점을 나타내는 명시적인 심볼로서 디폴트의 엔트리 포인트 대신에 entry 를 사용합니다. 심볼 entry 가 없었던 경우, 링커는 entry 를 숫자로서 해석하려고 시도해 그것을 개시 번지로서 사용합니다 (숫자는 기수를 10 으로서 해석됩니다. 선두에 도착한 0x 는 16 을 기수로 하는 것을 나타내, 0 는 8 을 기수로 하는 것을 나타냅니다).

-E
--export-dynamic
    동적으로 링크 된 실행 파일을 작성할 때에, 모든 심볼을 동적 심볼 테이블에 가세합니다. 동적 심볼 테이블은, 실행시에 동적 오브젝트로부터 보이는 심볼의 테이블입니다.

    만약 이 옵션을 사용하지 않았던 경우, 통상, 동적 심볼 테이블에는, 링크중으로 지정되어 따분한가의 동적 오브젝트로부터 참조되는 심볼만이 포함됩니다.

    다른 동적 오브젝트가 아니고, 그 프로그램으로 정의되고 있는 심볼을 참조해 돌려줄 필요가 있는 동적 오브젝트를 "dlopen" 로 로드하는 경우는, 아마 프로그램 자신을 링크 할 때에 이 옵션을 사용할 필요가 있겠지요.

    출력 형식이 서포트하고 있었을 경우, 버젼 스크립트를 사용해, 어느 심볼을 동적 심볼 테이블에 추가해야할 것인가를 제어할 수 있습니다. @ref{VERSION} 중의 --version-script 의 기술을 참조해 주세요.

-EB 빅 endian의 오브젝트를 링크 합니다. 이것은 디폴트의 출력 형식에 영향을 줍니다.

-EL little endian의 오브젝트를 링크 합니다. 이것은 디폴트의 출력 형식에 영향을 줍니다.

-f
--auxiliary name
    ELF 의 공유 오브젝트를 생성할 때에, 내부의 DT_AUXILIARY 필드에, 지정한 name 를 설정합니다. 이것은, 공유 오브젝트의 심볼 테이블을, 공유 오브젝트 name 의 심볼 테이블에 적용하는 보조의 필터로서 사용하는 일을, 동적 링커에 대해서 지시합니다.

    나중에 이 필터 오브젝트에 대해서 프로그램을 링크 했을 경우, 그 프로그램을 실행했을 때에, 동적 링커는 DT_AUXILIARY 필드를 봅니다. 동적 링커가 필터 오브젝트로부터의 심볼을 해결하는 경우는, 공유 오브젝트 name 안에 정의가 있는지 어떤지를 우선 체크합니다. 만약 그것이 있었을 경우는, 필터 오브젝트중의 정의 대신에 사용됩니다. 공유 오브젝트 name 는, 존재하지 않아도 상관하지 않습니다. 이와 같이 해 공유 오브젝트 name 는, 아마 데밧깅이나 머신 특유의 퍼포먼스라고 한 어느 기능의 다른 실장을 제공하기 위해서 사용할 수 있습니다.

    이 옵션은 2 회 이상 지정되어도 상관하지 않습니다. DT_AUXILIARY 엔트리는, 명령행에 나타난 차례로 생성됩니다.

-F name
--filter name
    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 를 부릅니다. 디폴트에서는, 링커는 "_fini" 를, 불러야 할 함수로서 사용합니다.

-g  무시됩니다. 이것은 다른 툴과의 호환성을 위해서(때문에) 제공되고 있습니다.

-Gvalue
--gpsize=value
    GP 레지스터를 사용해 최적화되는 오브젝트의 최대 사이즈를 size 로 설정합니다. 이것은, 큰 오브젝트와 작은 오브젝트를 다른 섹션에 배치하는 것을 서포트하고 있는 MIPS ECOFF 와 같은 오브젝트 파일 형식의 경우만 의미를 가집니다. 다른 오브젝트 파일 형식의 경우는 무시됩니다.

-hname
-soname=name
    ELF 의 공유 오브젝트를 생성할 때에, 내부의 DT_SONAME 필드에, 지정한 name 를 설정합니다. 실행 형식이 DT_SONAME 필드를 가지는 공유 오브젝트와 링크 되면(자), 실행 형식이 실행될 때에, 동적 링커는 링커에게 줄 수 있었던 파일명을 사용하는 대신에 DT_SONAME 필드에서 지정된 공유 오브젝트를 로드하려고 합니다.

-i  인크리멘타르린크를 실시합니다 (옵션 -r 와 같습니다).

-init name
    ELF 의 실행 형식 혹은 공유 오브젝트를 생성할 때, 함수의 주소에 DT_INIT 를 설정하는 것으로써, 실행 형식 혹은 공유 오브젝트가 로드 될 때에 NAME 를 부릅니다. 디폴트에서는, 링커는 "_init" 를, 불러야 할 함수로서 사용합니다.

-larchive
--library=archive
    archive파일 archive 를, 링크 해야 할 파일의 리스트에 추가합니다. 이 옵션은, 몇번 지정해도 상관하지 않습니다. ld 는, archive 가 지정될 때마다 "libarchive.a" 를 자신 패스 리스트로부터 찾습니다.

    공유 프로그램 라이브러리를 서포트하는 시스템에서는, ld 는, ".a" 이외의 사픽스를 가지는 프로그램 라이브러리도 찾는 일이 있습니다. 특히 ELF 나 SunOS 시스템에서는, ld 는, ".a" 그렇다고 하는 사픽스를 가지는 프로그램 라이브러리를 찾기 전에, ".so" 라고 한다 사픽스를 가지는 프로그램 라이브러리를 디렉토리로부터 찾습니다. 관습에 의해, ".so" 사픽스는 공유 프로그램 라이브러리를 나타냅니다.

    링커는, 명령행으로 지정된 그 자리소에서만, 1 회만 아카이브(archive)를 검색합니다. 만약 그 아카이브(archive)가, 그때까지 명령행에 나타난 오브젝트에서는 정의하고 있지 않는 심볼을 정의하고 있었을 때는, 링커는, 그 아카이브(archive)로부터 적절한 파일을 수중에 넣습니다. 그러나, 명령행에 나중에 나타난 오브젝트에 포함된다 미정도리 심볼에 의해, 링커가 아카이브(archive)를 재차 검색할 것은 없습니다.

    아카이브(archive)를 여러 차례 검색하도록(듯이) 링커에 강제하는 방법은, -( 옵션을 참조해 주세요.

    같은 아카이브(archive)를 명령행상에 여러 차례 지정해도 상관하지 않습니다.

    이런 종류의 아카이브(archive) 검색은, Unix 의 링커에서는 보통입니다. 그러나 AIX 상에서 ld 를 사용하는 경우, AIX 링커란 다른 동작을 하므로 주의가 필요합니다.

-Lsearchdir
--library-path=searchdir
    패스 searchdir 를, ld 가 아카이브(archive) 프로그램 라이브러리나 ld 의 제어 스크립트를 검색하는데 사용하는 패스의 리스트에 추가합니다. 이 옵션은, 몇번 지정해도 상관하지 않습니다. 디렉토리는, 명령행상에서 지정된 순서에 검색됩니다. 명령행상에서 지정된 디렉토리는, 디폴트의 디렉토리의 전에 검색됩니다. 모든 -L 옵션은, 옵션의 출현한 차례로 따르지 않고, 모든 -l 옵션에 적용됩니다.

    (-L 로 지정되지 않는다) 디폴트의 검색 패스의 조는, ld 가 어느 에뮬레이션 모드를 사용하고 있는지, 그리고 경우에 따라서는 어떻게 구성되었는지를 의존합니다.

    패스는, lynx (links) 클립트중에서 "SEARCH_DIR" 명령을 이용해도 지정할 수 있습니다. 이 방법으로 지정된 디렉토리는, 명령행상에서 링커 스크립트가 나타난 시점에서 검색됩니다.

-memulation
    emulation 링커를 에뮤레이트 합니다. --verbose 나 -V 옵션으로, 이용 가능한 에뮬레이션을 리스트 할 수 있습니다.

    -m 옵션이 지정되어 있지 않은 경우, 에뮬레이션은, "LDEMULATION" 환경 변수가 정의되고 있으면 거기로부터 취득됩니다.

    그 이외의 경우, 디폴트의 에뮬레이션은, 링커가 어떻게 구성되었는지를 의존합니다.

-M
--print-map
    링크 MAP를 표준 출력에 표시합니다. 링크 MAP는, 이하를 포함한 링크의 정보를 제공합니다:

    •   오브젝트 파일과 심볼이, 메모리의 어디에 MAP 될까.

    •   코먼 심볼을 어떻게 할당할 수 있었는지.

    •   링크에 포함되는 모든 아카이브(archive) 멤버, 및 그 아카이브(archive) 멤버를 수중에 넣는 계기가 된 심볼.

-n
--nmagic
    섹션의 페이지 alignment를 무효로 해, 가능하면 출력에 "NMAGIC" 와 표시를 합니다.

-N
--omagic
    텍스트 섹션과 데이터 섹션을 읽고 쓰기 가능하게 설정합니다. 또, 데이터 세그먼트의 페이지 alignment도 실시하지 않습니다. 출력 형식이 Unix 형식의 magic number를 서포트하고 있는 경우, 출력에 "OMAGIC" 와 표시를 합니다.

-o output
--output=output
    output 를, ld 에 의해 생성되는 프로그램의 이름으로서 사용합니다. 이 옵션이 지정되지 않았던 경우, a.out 라는 이름이 디폴트로 사용됩니다. 스크립 코맨드의 "OUTPUT" 에 의해도, 출력 파일명을 지정할 수가 있습니다.

-O level
    level 가 0 보다 큰 수치였을 경우, ld 는 출력을 최적화합니다. 이것에는 매우 긴 시간이 걸리기 때문에, 최종적인 바이너리의 작성시만 유효하게 해야 하는 것이지요.

-q
--emit-relocs
    최종적으로 링크 된 실행 형식중에, 재배치 섹션과 내용을 남깁니다. 이러한 정보는, 링크 후의 분석·최적화 툴이 실행 형식을 올바르게 변경하는데 필요하겠지요. 이것은, 보다 큰 실행 형식을 생성합니다.

    이 옵션은, 현재 ELF 플랫폼에서 밖에 서포트되고 있지 않습니다.

-r
--relocateable
    재배치 가능한 출력을 생성합니다. 즉, ld 에의 입력으로서 이용할 수 있는 출력 파일을 생성합니다. 이것은 자주(잘) 부분 링크 로 불립니다. 이 부작용으로서 Unix 의 표준의 magic number를 서포트하는 환경에서는, 이 옵션은 출력 파일의 magic number를 "OMAGIC" 로 설정합니다. 이 옵션이 지정되지 않았던 경우는, 절대 주소치를 이용한 파일이 생성됩니다. C++ 프로그램을 링크 하는 경우, 이 옵션은 constructor　 　 에의 참조를 해결하지 않습니다. 그러한 경우는 -Ur 를 사용해 주세요.

    입력 파일이 출력 파일과 같은 형식이 아닌 경우, 부분 링크는, 입력 파일이 재배치 섹션을 전혀 가지지 않을 때만 서포트됩니다. 다른 출력 형식은, 새로운 제한을 가지는 일이 있습니다. 예를 들면, 어느 "a.out" 베이스의 형식은, 입력 파일이 다른 형식이었을 때에는, 부분 링크를 전혀 서포트하지 않습니다.

    이 옵션은, -i 와 같습니다.

-R filename
--just-symbols=filename
    심볼명이나 그 주소를 filename 로부터 읽어들입니다만, 그것을 재배치하거나 출력에 포함하는 것은 하지 않습니다. 이것에 의해, 출력 파일이 다른 프로그램으로 정의된 메모리의 절대 위치를 심볼로 참조할 수 있게 됩니다. 이 옵션은 2 회 이상 사용해 상관하지 않습니다.

    다른 ELF 링커와의 호환성이기 때문에, -R 옵션의 뒤에 파일명은 아니고 디렉토리명이 계속되었을 경우, -rpath 옵션으로서 다루어집니다.

-s
--strip-all
    모든 심볼 정보를 출력 파일로부터 삭제합니다.

-S
--strip-debug
    (모든 심볼은 아니고) 모든 디버그용 심볼 정보를 출력 파일로부터 삭제합니다.

-t
--trace
    ld 가 입력 파일을 처리할 때마다, 입력 파일명을 표시합니다.

-T scriptfile
--script=scriptfile
    scriptfile 를 링커 스크립트로서 사용합니다. 이 스크립트는, (추가되는 것이 아니라) ld 의 디폴트의 링커 스크립트를 옮겨놓습니다. 따라서, scriptile 에는, 출력 파일을 기술하는데 필요한 모든 일을 지정하지 않으면 안됩니다. scriptfile 가 커런트 디렉토리에 존재하지 않는 경우, "ld" 는, 모든 -L 옵션에 이어 지정된 디렉토리를 검색합니다. 복수의 -T 옵션은, 하나에 정리합니다.

-u symbol
--undefined=symbol
    강제적으로 symbol 를 미정도리 심볼로서 출력 파일에 포함합니다. 이렇게 하는 것에 의해, 예를 들면 표준 프로그램 라이브러리로부터 한층 더 모듈을 링크 하는 방아쇠로 할 수가 있습니다. 다른 옵션 인수를 가지는 것으로 -u 를 반복 지정할 수가 있어 미정도리 심볼을 추가합니다. 이 옵션은, "EXTERN" 링커 스크립 코맨드와 같습니다.

-Ur C++ 프로그램 이외에 대해서는, 이 옵션은 -r 와 같습니다. 재배치 가능한 출력, 즉 ld 에 재차 입력 가능한 출력 파일을 생성합니다. C++ 프로그램을 링크 하는 경우, -r 과는 달리, -Ur 는 constructor　 　 에의 참조를 해결합니다. -Ur 를 사용해 링크 된 파일에 대해서는, -Ur 를 사용할 수 없습니다. constructor　 　 의 테이블이 한 번 생성되면(자), 추가할 수가 없습니다. -Ur 는, 마지막 부분 링크에만 사용하도록(듯이) 해, 그 외의 경우는 -r 를 사용해 주세요.

--unique[=SECTION]
    SECTION 에 일치한 입력 섹션마다, 개별의 출력 섹션을 생성합니다. 옵션의 와일드 카드 SECTION 인수가 없는 경우는, 고아 입력 섹션마다, 개별의 출력 섹션을 생성합니다. 고아 섹션이란, 링커 스크립트중에 명시적으로 기술되어 있지 않은 섹션입니다. 이 옵션은, 명령행상에서 여러 차례 사용할 수 있습니다. 이것에 의해, 통상의 동명의 입력 섹션의 merge를 실시하지 않게 합니다. 이것은, 링커 스크립트중에서의 출력 섹션의 할당을 덧쓰기합니다.

-v
--version
-V  ld 의 버젼 번호를 표시합니다. -V 옵션은, 서포트하고 있는 에뮬레이터의 일람도 표시합니다.

-x
--discard-all
    모든 로컬 심볼을 삭제합니다.

-X
--discard-locals
    모든 일시적인 로컬 심볼을 삭제합니다. 대부분의 타겟으로 두어, 그것은 이름이 L 로 시작된다 모든 로컬 심볼입니다.

-y symbol
--trace-symbol=symbol
    링크 된 파일 가운데, symbol 가 나타나는 파일명을 표시합니다. 이 옵션은 몇 번이라도 지정할 수 있습니다. 많은 시스템상에서는, 심볼명의 전에 언더스코어를 붙일 필요가 있겠지요.

    이 옵션은, 링크중에 미정도리 심볼이 발견되었지만, 그것이 어디에서 참조되고 있는지를 모르는 경우에 도움이 됩니다.

-Y path
    디폴트의 프로그램 라이브러리 검색 패스에 path 를 추가합니다. 이 옵션은, Solaris 와의 호환성을 위해서(때문에) 존재합니다.

-z keyword
    인식되는 키워드는, "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", "origin", "combreloc", "nocombreloc", "nocopyreloc" 입니다. 다른 키워드는, Solaris 와의 호환성을 위해서(때문에) 무시됩니다. "initfirst" 는, 실행시에 그 오브젝트가 다른 오브젝트보다 먼저 초기화된다고 하는 표시를 합니다. "interpose" 는, 주실행 형식 이외의 모든 심볼의 전에, 그 오브젝트의 심볼 테이블을 삽입한다고 하는 표시를 합니다. "loadfltr" 는, 실행시에 그 오브젝트의 필터가 즉시 실행된다고 하는 표시를 합니다. "nodefaultlib" 는, 이 오브젝트의 의존관계(dependencies)를 검색할 때, 디폴트의 프로그램 라이브러리 검색 패스를 무시한다고 하는 표시를 합니다. "nodelete" 는, 그 오브젝트가 실행시에 언로드되지 않는다고 하는 표시를 합니다. "nodlopen" 는, 그 오브젝트에 "dlopen" 를 적용할 수 없다고 하는 표시를 합니다. "nodump" 는, 그 오브젝트가 "dldump" 에 의해 덤프 할 수 없다고 하는 표시를 합니다. "now" 는, 그 오브젝트가 실행시 지연 바인딩은 아니라고 하는 표시를 합니다. "origin" 는, 그 오브젝트가 $ORIGIN 를 포함하고 있을지도 모르다고 하는 표시를 합니다. "defs" 는, 미정도리 심볼을 허가하지 않습니다. "combreloc" 는, 복수의 재배치 가능 섹션을 결합해, 정렬 해, 동적 심볼 검색의 캐쉬를 가능하게 합니다. "nocombreloc" 는, 복수의 재배치 가능 섹션의 결합을 무효로 합니다. "nocopyreloc" 는, 재배치 가능 섹션의 복제의 생성을 무효로 합니다.

-( archives -)
--start-group archives --end-group
    archives 는, archive파일의 리스트를 지정합니다. 이것들은 파일명 그 자체에서도, -l 옵션에서도 상관하지 않습니다.

    지정된 아카이브(archive)는, 새로운 미정도리 참조가 없어질 때까지 반복 검색됩니다. 통상, 아카이브(archive)는, 명령행으로 지정된 차례로 1 회만 검색됩니다. 그 아카이브(archive)중의 심볼이, 명령행상의 뒤로 나타났다 아카이브(archive)중의 오브젝트가 참조하는 미정도리 심볼을 해결하는데 필요한 경우, 링커는 그 참조를 해결할 수가 없습니다. 아카이브(archive)를 그룹화 하면(자), 모든 가능한 참조가 해결될 때까지, 그러한 모든 아카이브(archive)는 반복 검색됩니다.

    이 옵션을 사용하면(자), 퍼포먼스가 크게 떨어집니다. 이것을 사용하는 것은, 2 개(살) 이상의 아카이브(archive)중에서, 참조의 순환을 피할 수 없다 경우에만 사용하는 것이 좋을 것입니다.

-assert keyword
    이 옵션은, SunOS 와의 호환성을 위해서(때문에) 무시됩니다.

-Bdynamic
-dy
-call_shared
    동적 프로그램 라이브러리와 링크 합니다. 이것은, 공유 프로그램 라이브러리를 서포트하는 플랫폼상에서만 의미를 가집니다. 이 옵션은, 그러한 플랫폼상에서는, 보통 디폴트가 되고 있습니다. 이 옵션에 다른 형식이 있는 것은, 여러가지 시스템과의 호환성이기 때문에입니다. 이 옵션은, 명령상에서 몇 번이라도 사용할 수가 있습니다. 이것은 후에 계속되는 -l 옵션의 프로그램 라이브러리 검색에 영향을 줍니다.

-Bgroup
    동적 섹션중의 "DT_FLAGS_1" 엔트리의 "DF_1_GROUP" 플래그를 설정합니다. 이것에 의해, 동적 링커가 이 오브젝트와 그 의존관계(dependencies)의 검색을 그룹내에서만 실행하게 됩니다. --no-undefined 가 암묵으로 지정됩니다. 이 옵션은, 공유 프로그램 라이브러리를 서포트한다 ELF 플랫폼상에서만 의미를 가집니다.

-Bstatic
-dn
-non_shared
-static
    공유 프로그램 라이브러리를 링크 하지 않습니다. 이것은, 공유 프로그램 라이브러리를 서포트하는 플랫폼상에서만 의미를 가집니다. 이 옵션에 다른 형식이 있는 것은, 여러가지 시스템과의 호환성이기 때문에입니다. 이 옵션은, 명령행상에서 몇 번이라도 사용할 수가 있습니다. 이것은 후에 계속되는 -l 옵션의 프로그램 라이브러리 검색에 영향을 줍니다.

-Bsymbolic
    공유 프로그램 라이브러리를 생성할 때에, 그 공유 프로그램 라이브러리중에 정의가 있으면, 글로벌 심볼에의 참조를 그 정의에 묶습니다. 통상, 공유 프로그램 라이브러리를 링크 한 프로그램은, 그 공유 프로그램 라이브러리중의 정의를 덧쓰기할 수 있습니다. 이 옵션은, 공유 프로그램 라이브러리를 서포트한다 ELF 플랫폼상에서만 의미를 가집니다.

--check-sections
--no-check-sections
    섹션 주소를 할당할 수 있었던 후, 그러한 주소가 겹쳐 없는지 어떤지의 체크를 하지 않게 링커에 지시합니다. 통상, 링커는 체크를 실시해, 겹이든지를 발견했을 때는 적절한 에러 메세지를 출력합니다. 링커는, 오버레이 섹션을 알고 있어, 그것을 생성하는 것을 허가합니다. 명령행 스윗치 --check-sections 를 사용하는 것으로, 디폴트의 동작에 되돌릴 수 있습니다.

--cref
    상호 참조 테이블을 출력합니다. 링커 MAP 파일이 생성되는 경우, 상호 참조 테이블은 MAP 파일에 출력됩니다. 그 이외의 경우, 표준 출력에 출력됩니다.

    테이블 형식은, 의도적으로 간단하게 하고 있으므로, 필요한 경우는 스크립트로 간단하게 처리할 수가 있습니다. 심볼은, 이름으로 정렬 되어 출력됩니다. 각각의 심볼마다, 파일명이 리스트 됩니다. 심볼이 정의되고 있는 경우는, 리스트의 최초의 파일에 그 정의가 포함되어 있습니다. 나머지의 파일은, 그 심볼에의 참조를 포함하고 있습니다.

--no-define-common
    이 옵션은, 코먼 심볼에의 주소 할당을 억제합니다. 스크립 코맨드 "INHIBIT_COMMON_ALLOCATION" 는, 같은 효과를 가집니다.

    --no-define-common 옵션은, 코먼 심볼에 주소를 할당하는 판단을, 출력 파일의 타입의 선택으로부터 떼어냅니다. 이 옵션을 지정하지 않는 경우는, 재배치 불가의 출력 타입에 의해, 주소는 강제적으로 코먼 심볼에 할당할 수 있습니다. --no-define-common 를 사용하는 것으로써, 공유 프로그램 라이브러리로부터 참조되는 코먼 심볼은, 주프로그램의 주소에만 할당할 수 있습니다. 이 옵션은, 공유 프로그램 라이브러리중의 중복 한 미사용 area를 삭제합니다. 또, 동적 심볼 해결하기 위해서 특수한 검색 패스를 가지는 많은 동적 모듈이 있는 경우, 잘못한 중복을 해결할 때에 일어날 수 있는 혼란을 막습니다.

--defsym symbol=expression
    expression 로 지정되는 절대 주소를 포함했다 글로벌 심볼을, 출력 파일에 생성합니다. 복수의 심볼을 정의하기 위해서, 명령행상에서 필요한 회수만 이 옵션을 사용할 수 있습니다. expression 에는, 한정된 형식의 산술 연산이 서포트되고 있습니다. 16 진정수나 존재하는 심볼명을 사용할 수 있어 16 진정수나 심볼의 가감(상태)산에 "+" 나 "-" 를 사용할 수 있습니다. 좀 더 복잡한 식이 필요하면, 스크립트로부터 링커의 명령어를 사용하는 것을 검토해 주세요. 주의 : symbol 나 등호 (``=''), expression 의 사이에 공백을 들어갈 수 있어서는 안됩니다.

--demangle[=style]
--no-demangle
    이러한 옵션은, 에러 메세지나 그 외의 출력에 포함된다 심볼명을 데망르 하는지 어떤지를 제어합니다. 데망르 하는 경우, 링커는 심볼명을 읽기 쉬운 형식에서 표현하려고 시도합니다. 즉 링커는, 선두의 언더스코어가 오브젝트 파일 형식에서 사용되고 있었을 경우, 그것을 없애,C++ 의 맨 한패 된 심볼명을 유저가 읽기 쉬운 이름으로 변환합니다. 컴파일러에 의해 맨 한패 형식은 다릅니다. 데망르 형식 인수를 지정하는 것으로써, 사용하고 있는 컴파일러에 대응했다 데망르 형식을 선택할 수 있습니다. 링커는, 환경 변수 COLLECT_NO_DEMANGLE 가 설정되어 있지 않은 한, 디폴트로 데망르 합니다. 이러한 옵션에 의해, 디폴트를 덧쓰기할 수 있습니다.

--dynamic-linker file
    동적 링커의 이름을 설정합니다. 이것은, 동적으로 링크 되는 ELF 실행 형식을 생성할 때 마셔 의미가 있습니다. 통상은, 디폴트의 동적 링커로 올바를 것입니다. 자신이 무엇을 하려고 하고 있는지를 알고 있는 경우 이외는, 사용하지 말아 주세요.

--embedded-relocs
    이 옵션은, GNU 컴파일러와 어셈블러에 -membedded-pic 옵션을 지정해 생성한 MIPS 의 내장하기 PIC 코드를 링크 할 때 마셔 의미가 있습니다. 이것을 지정하면(자), 링커는 있는 테이블을 생성합니다. 이 테이블은, 포인터의 값에 정적으로 초기화 떠날 수 있어 모든 데이터를, 실행시에 재배치하기 위해서 사용됩니다. 자세한 것은, testsuite/ld-empic 의 코드를 참조해 주세요.

--fatal-warnings
    모든 경고를, 에러로서 취급합니다.

--force-exe-suffix
    출력 파일의 사픽스가 .exe 가 되도록(듯이) 합니다.

    이 옵션을 지정하면(자), 무사하게 생성되고 완전하게 링크 되었다 출력 파일에 ".exe" 나 ".dll" 라고 한다 사픽스가 붙어 있지 않았던 경우, 링커는 출력 파일을, 같은 이름에 ".exe" 사픽스를 붙인 파일에 카피합니다. 이 옵션은, Microsoft Windows 호스트상에서, 미수정의 Unix 용의 makefile 를 사용하는 경우에 편리합니다. 그렇다고 하는 것도, Windows 의 몇개의 버젼에서는, ".exe" 사픽스가 붙어 있지 않은 이미지를 실행할 수 없기 때문입니다.

--no-gc-sections
--gc-sections
    미사용의 입력 섹션의 쓰레기 콜렉션을 유효하게 합니다. 이 옵션을 서포트하고 있지 않는 타겟상에서는 무시됩니다. 이 옵션은, -r 와는 호환성이 없고, 동적 링크와 함께 사용해야 하는 것이기도 하지 않습니다. 디폴트의 동작 (쓰레기 콜렉션을 실행하지 않는다)에 되돌리려면 , 명령행으로 --no-gc-sections 를 지정해 주세요.

--help
    명령행 옵션의 개요를 표준 출력에 표시해, 종료합니다.

--target-help
    타겟 고유의 옵션의 요약을 표준 출력에 표시해, 종료합니다.

-Map mapfile
    링크 MAP를 파일 mapfile 에 출력합니다. 전출의 -M 옵션의 기술을 참조해 주세요.

--no-keep-memory
    통상 ld 는, 입력 파일의 심볼 테이블을 메모리에 캐쉬하는 것으로, 메모리 사용량보다 속도를 우선합니다. 이 옵션을 지정하면(자), ld 는, 필요에 따라서 심볼 테이블을 읽는 것으로, 메모리 사용량을 최소로 합니다. 이것은, 큰 실행 형식을 링크 할 때에, ld 가 메모리 공간을 다 써 버려 버리는 것 같은 경우에 필요합니다.

--no-undefined
-z defs
    통상, 비심볼적 공유 프로그램 라이브러리를 작성하는 경우, 미정도리 심볼은 그대로 놓아두어져 실행시 로더에 의해 해결됩니다. 이러한 옵션은, 그러한 미정도리 심볼을 허락하지 않습니다.

--allow-shlib-undefined
    --no-undefined 가 설정되어 있어도, 공유 오브젝트중의 미정도리 심볼을 허가합니다. 이 실제의 결과는, 통상의 오브젝트중의 미정도리 심볼은 에러를 일으킵니다만, 공유 오브젝트중의 미정도리 심볼은 무시됩니다. no_undefined 의 실장은, 미정도리 심볼에 의해 동적 링커가 차 버리는 것을 상정하고 있습니다. 그러나, 공유 프로그램 라이브러리에 미정도리 심볼이 포함되고 있는 것이 정상적이다 시스템이, 적어도 1 개 (BeOS) 있습니다. 이 시스템에서는, 현재의 아키텍쳐에 가장 적절한 함수를 선택하도록, 로드시에 커널이 패치를 맞힙니다. 즉, 가장 적절한 memset 함수를 동적으로 선택합니다. 아무래도 HPPA 공유 프로그램 라이브러리에 미정도리 심볼이 포함되는 것도 보통 일 같습니다.

--no-warn-mismatch
    통상 ld 는, 부적당한 입력 파일을 링크 하려고 했을 경우, 에러를 발합니다. 예를 들면, 다른 프로세서전용, 혹은 다른 endian전용으로 컴파일 된 것이다고 하는 경우입니다. 이 옵션을 지정하면(자), ld 는, 이러한 일어날 수 있는 에러를 가만히 있어 허가합니다. 이 옵션은, 링커의 에러가 적절하지 않다고 알고 있다 특수한 일 했을 때 마셔 사용해, 사용 시에는 주의하지 않으면 안됩니다.

--no-whole-archive
    이후에 계속되는 archive파일에 대해서, --whole-archive 옵션의 효과를 무효로 합니다.

--noinhibit-exec
    이용 가능하면 언제나, 실행 형식의 출력 파일을 남겨 둡니다. 보통 링커는, 링크 처리중에 에러가 발생했을 경우, 출력 파일을 생성하지 않습니다. 어떤 에러가 발생해도, 출력 파일을 쓰지 않고 종료합니다.

-nostdlib
    명령행상에서 명시적으로 지정된 프로그램 라이브러리 디렉토리만을 검색합니다. 링커 스크립트중에서 지정된 프로그램 라이브러리 디렉토리는, (명령행상에서 지정된 링커 스크립트여도) 무시됩니다.

--oformat output-format
    ld 는, 2 종류 이상의 오브젝트 파일을 서포트하도록(듯이) 구성할 수가 있습니다. ld 가 그처럼 구성되어 있었을 경우, --oformat 옵션을 이용해, 출력 파일의 바이너리 형식을 지정할 수가 있습니다. 그러나 ld 가 다른 오브젝트 형식을 서포트하는 듯 구성되어 있었다고 해도, 통상은 이 옵션을 지정할 필요는 없습니다. 그렇다고 하는 것도, ld 는, 각각의 머신상에서 가장 흔히 있던 형식을 디폴트의 출력 형식으로 하도록(듯이) 구성되어 있을 것이기 때문입니다. output-format 는 텍스트 캐릭터 라인으로, BFD 프로그램 라이브러리에 의해 서포트되고 있는 특정의 형식의 이름입니다 (objdump -i 를 이용해, 이용 가능한 바이너리 형식을 리스트 할 수 있습니다). 스크립 코맨드 "OUTPUT_FORMAT" 에서도, 출력 형식을 지정할 수가 있습니다만, 이 옵션에 의해 덧쓰기됩니다.

-qmagic
    이 옵션은, Linux 호환성을 위해서(때문에) 무시됩니다.

-Qy 이 옵션은, SVR4 호환성을 위해서(때문에) 무시됩니다.

--relax
    머신 의존의 효과를 가지는 옵션입니다. 이 옵션을 서포트하고 있는 타겟은, 소수입니다.

    몇개의 플랫폼에서는, --relax 옵션은, 링커가 프로그램중의 애드레싱을 해결할 수 있는 경우에 가능해진다 포괄적인 최적화를 실행합니다. 이것은, 출력 오브젝트 파일중의 주소 모드의 완화나, 신규 인스트럭션의 합성 등입니다.

    몇개의 플랫폼상에서는, 이러한 링크시의 포괄적인 최적화에 의해, 생성된 실행 형식의 상징적 디버그가 불가능이 되는 경우가 있습니다. 불가능하게 되는 것이 알려져 있는 것은, 마츠시타의 MN10200 나 MN10300 프로세서 패밀리입니다.

    이것이 서포트되어 있지 않은 플랫폼에서는, --relax 는 받아들일 수 있습니다만, 무시됩니다.

--retain-symbols-file filename
    파일 filename 중에 리스트 된 심볼만을 남겨, 다른 심볼을 모두 파기합니다. filename 는, 1 행 마다 1 개의 심볼명이 써 있다 단순한 평탄한 파일입니다. 이 옵션은 특히, 실행시의 메모리를 절약하기 위해서, 1 개(살)의 큰 포괄적인 심볼 테이블이 서서히 증가해 간다 (VxWorks 와 같은) 환경에서 도움이 됩니다.

    --retain-symbols-file 는, 미정도리 심볼이나 재배치에 필요한 심볼은 폐기하지 않습니다.

    --retain-symbols-file 는, 명령행상에서 1 회 밖에 지정할 수가 없습니다. 이것은, -s 나 -S 를 무효로 합니다.

-rpath dir
    실행시 프로그램 라이브러리 검색 패스에 디렉토리를 추가합니다. 이것은, ELF 실행 형식을 공유 오브젝트와 링크 할 때에 사용됩니다. 모든 -rpath 의 인수는 결합되어 동적 링커에게 건네집니다. 동적 링커는, 이것들을 이용해 실행시에 공유 오브젝트를 검색합니다. -rpath 옵션은, 명시적으로 링크 되는 공유 오브젝트에 의해 필요하게 되는 공유 오브젝트를 검색하는데도 사용됩니다. 이것에 대해서는, -rpath-link 옵션의 기술을 참조해 주세요. ELF 실행 형식을 링크 할 때에 -rpath 가 사용되지 않은 경우, 환경 변수 "LD_RUN_PATH" 의 내용이 정의되고 있으면, 그것이 사용됩니다.

    -rpath 옵션은, SunOS 상에서도 사용됩니다. SunOS 상에서는 디폴트로, 링커는 지정된 모든 -L 옵션으로부터 실행시 검색 패스를 작성합니다. -rpath 옵션이 지정되었을 경우, 실행시 검색 패스는 -L 옵션을 무시해, -rpath 옵션만을 이용해 작성됩니다. 이 옵션은, gcc 를 사용할 때에 도움이 됩니다. 그렇다고 하는 것은, gcc 는 많은 -L 옵션을 추가해, 그것은 NFS mount 된 파일 시스템상에 있을지도 모르기 때문입니다.

    다른 ELF 링커와의 호환성을 위해서(때문에), -R 옵션의 뒤에 파일명은 아니고 디렉토리명이 계속되었을 경우, -rpath 옵션으로서 다루어집니다.

-rpath-link DIR
    ELF 혹은 SunOS 를 사용했을 경우, 어느 공유 프로그램 라이브러리가 이제(벌써) 1 개(살)별의 공유 프로그램 라이브러리를 요구하는 일이 있습니다. 이것은, "ld -shared" 로서 링크 했을 때, 입력 파일의 1 개에 공유 프로그램 라이브러리가 포함되어 있는 경우에 일어납니다.

    비공유, 재배치 불가의 링크를 실시할 때에 링커가 그러한 의존성에 만나면(자), 그것이 명시적으로 링크 되지 않은 경우, 링커는 요구된 공유 프로그램 라이브러리를 자동적으로 찾아, 링크에 포함하려고 합니다. 그러한 경우, -rpath-link 옵션은, 검색하는 최초의 디렉토리의 조를 지정합니다. -rpath-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_RUNPATH" 혹은 "DT_RPATH" 중의 디렉토리가, 필요하게 되는 공유 프로그램 라이브러리의 검색에 사용됩니다. "DT_RUNPATH" 엔트리가 존재했을 경우, "DT_RPATH" 엔트리는 무시됩니다.

    7.  디폴트의 디렉토리. 통상, /lib 와 /usr/lib 입니다.

    8.  ELF 시스템상의 네이티브인 링커의 경우, 파일 /etc/ld.so.conf 가 존재하고 있으면(자), 그 파일중의 디렉토리의 리스트.

    요구된 공유 프로그램 라이브러리가 발견되지 않는 경우, 링커는 경고를 내 링크를 계속합니다.

-shared
-Bshareable
    공유 프로그램 라이브러리를 작성합니다. 현재 이것은, ELF, XCOFF, SunOS 상만으로 서포트되고 있습니다. SunOS 상에서는, -e 옵션이 사용되지 않고, 링크시에 미정도리 심볼이 존재하고 있으면, 링커는 자동적으로 공유 프로그램 라이브러리를 작성합니다.

--sort-common
    이 옵션을 지정하면(자), ld 는, 코먼 심볼을 적절한 출력 섹션에 배치할 때에 사이즈로 정렬 합니다. 최초로 모든 1 바이트의 심볼이 배치되어 다음에 모든 2 바이트의 심볼, 그리고 모든 4 바이트의 심볼, 그리고 그 외의 심볼이 배치됩니다. 이와 같이 하는 것은, alignment의 제약에 의해 심볼의 사이에 틈새가 생기는 것을 막기 (위해)때문입니다.

--split-by-file [size]
    --split-by-reloc 와 같습니다만, 각각의 입력 파일에 대해, size 에 이를 때마다 새로운 출력 섹션을 작성합니다. size 가 지정되지 않았던 경우, 디폴트의 사이즈는 1 입니다.

--split-by-reloc [count]
    파일중의 1 개의 출력 섹션이, count 보다 많은 재배치 정보를 포함하지 않게, 출력 파일중에 여분의 섹션을 작성하려고 합니다. 이것은, COFF 오브젝트 형식의 리얼타임 커널에 다운로드하기 위한 거대한 재배치 가능 파일을 작성할 때에 도움이 됩니다. 그렇다고 하는 것도, COFF 에서는 1 개의 섹션은 65535 를 넘는다 재배치 정보를 표현할 수가 없기 때문입니다. 이 옵션은, 임의의 섹션을 서포트하고 있지 않다 오브젝트 파일 형식에서는, 잘 되지 않는 것에 주의해 주세요. 링커는, 다시 분배할 때 에 개개의 입력 섹션을 분할하지 않기 때문에, 1 개의 입력 섹션이 count 를 넘는 재배치 정보를 포함하고 있는 경우, 1 개의 출력 섹션에는, 그 만큼의 수의 재배치 정보를 포함하게 됩니다. count 의 기본값은 32768 입니다.

--stats
    실행 시간이나 메모리 사용량등이라고 하는 링커의 처리에 관한 통계 정보를, 계산해 출력합니다.

--traditional-format
    타겟으로 따라서는, ld 의 출력이 기존의 링커의 출력과 몇개의 점으로 다른 일이 있습니다. 이 스윗치를 지정하면(자), ld 는 기존의 링커의 형식을 사용합니다.

    예를 들면 SunOS 상에서는, ld 는 심볼 캐릭터 라인 테이블내의 중복 한 엔트리를 1 개로 합니다. 이것에 의해, 완전한 디버그 정보를 가지는 출력 파일의 사이즈가, 30% 이상이나 작아집니다. 유감스럽게, SunOS 의 "dbx" 프로그램은, 생성된 파일을 읽어들일 수가 없습니다 ("gdb" 에서는 문제 없습니다). --traditional-format 스윗치를 지정하면(자), 중복 한 엔트리를 1 개로 정리하지 않습니다.

--section-start sectionname=org
    출력 파일중의 섹션을, org 로 지정된 절대 주소에 배치합니다. 복수의 섹션을 배치시키는 경우, 이 옵션은, 필요에 따라서 명령행중에 몇 번이라도 지정할 수가 있습니다. org 는, 단독의 16 진수가 아니면 안됩니다. 다른 링커와의 호환성을 위해서(때문에), 16 진수의 선두에 통상 붙이는 0x 를 생략 할 수가 있습니다. sectionname 와 등호 (``=''), org 의 사이에는 공백을 끼우지 못하는 것에 주의해 주세요.

-Tbss org
-Tdata org
-Ttext org
    org 를, 출력 파일중의 "bss", "data", "text" 세그먼트(segment)의 --- 각각 --- 의 개시 주소로 합니다. org 는, 단독의 16 진수가 아니면 안됩니다. 다른 링커와의 호환성을 위해서(때문에), 16 진수의 선두에 통상 붙이는 0x 를 생략 할 수가 있습니다.

--dll-verbose
--verbose
    ld 의 버젼 번호와 서포트하고 있는 링커 에뮬레이션의 일람을 표시합니다. 또, 어느 입력 파일을 오픈할 수 있어, 어느 입력 파일을 오픈할 수 없는 것인지도 표시합니다. 게다가 사용되는 링커 스크립트도 표시합니다.

--version-script=version-scriptfile
    링커에, 버젼 스크립트명을 지정합니다. 이것은 통상, 공유 프로그램 라이브러리를 생성할 때에 사용되어 생성하는 프로그램 라이브러리의 버젼 계층에 대한 부가적인 정보를 지정합니다. 이 옵션은, 공유 프로그램 라이브러리를 서포트하는 ELF 플랫폼상에서만 의미가 있습니다.

--warn-common
    코먼 심볼이, 다른 공유 심볼이나 심볼 정의와 묶을 수 있었을 때에 경고를 냅니다. Unix 의 링커는, 이 조금 적당관습을 허락하고 있습니다만, 다른 operating system상의 링커는, 허락하고 있지 않습니다. 이 옵션을 지정하면(자), 글로벌 심볼을 묶을 수 있는 것으로부터 온다 잠재적인 문제를 발견할 수가 있습니다. 유감스럽게, C 프로그램 라이브러리안에는 이 관습을 사용하고 있는 것이 있어, 프로그램중 뿐만이 아니라 프로그램 라이브러리중의 심볼에 대해서도, 이 경고가 나오는 일이 있습니다.

    글로벌 심볼에는 3 종류 있습니다. 이하로 C 언어의 예를 사용해 설명합니다.

    int i = 1;
        정의입니다. 출력 파일중의 초기화가 끝난 데이터 섹션에 놓여집니다.

    extern int i;
        미정도리 참조입니다. 메모리는 할당할 수 없습니다. 이 변수에 대한 정의나 코먼 심볼이, 어디엔가 없으면 안됩니다.

    int i;
        코먼 심볼입니다. 변수에 대해서, (1 개(살) 혹은 복수의) 코먼 심볼 밖에 없는 경우, 출력 파일의 비초기화 데이터 area에 놓여집니다. 링커는, 같은 변수에 대한 복수의 코먼 심볼을, 1 개의 코먼 심볼로 정리합니다. 그러한 사이즈인가 차이가 났을 경우, 가장 큰 사이즈의 area가 놓칩니다. 같은 변수에 대해서 정의가 있었을 경우, 링커는 공유 심볼을 선언으로 변환합니다.

    --warn-common 옵션을 지정하면(자), 링커는 5 종류의 경고를 냅니다. 각각의 경고는, 2 행으로부터 되어 있습니다. 최초의 행은, 이마데만난 심볼을 설명하고 있어, 다음의 행은, 이전에 같은 이름으로 만난 심볼을 설명합니다. 2 개의 심볼의 다른 한쪽, 혹은 양쪽 모두는, 코먼 심볼입니다.

    1.  심볼에 대한 정의가 이미 존재하기 위해(때문에), 코먼 심볼을 참조로 변환합니다.

                I<file>(I<section>): warning: common of `I<symbol>'
                   overridden by definition
                I<file>(I<section>): warning: defined here

    2.  심볼에 대한 정의가 나중에 나타났기 때문에, 코먼 심볼을 참조로 변환합니다. 이것은 상기의 케이스와 같습니다만, 심볼이 나타난 차례가 다릅니다.

                I<file>(I<section>): warning: definition of `I<symbol>'
                   overriding common
                I<file>(I<section>): warning: common is here

    3.  코먼 심볼을, 기출의 같은 사이즈의 코먼 심볼에 merge 합니다.

                I<file>(I<section>): warning: multiple common
                   of `I<symbol>'
                I<file>(I<section>): warning: previous common is here

    4.  코먼 심볼을, 기출의, 보다 큰 코먼 심볼에 merge 합니다.

                I<file>(I<section>): warning: common of `I<symbol>'
                   overridden by larger common
                I<file>(I<section>): warning: larger common is here

    5.  코먼 심볼을, 기출의, 보다 작은 코먼 심볼에 merge 합니다. 이것은 상기의 케이스와 같습니다만, 심볼이 나타난 차례가 다릅니다.

                I<file>(I<section>): warning: common of `I<symbol>'
                   overriding smaller common
                I<file>(I<section>): warning: smaller common is here

--warn-constructors
    글로벌 constructor　 　 이 1 개에서도 사용되고 있었을 경우, 경고를 냅니다. 이것이 도움이 되는 파일 형식은 불과입니다. COFF 나 ELF 와 같은 형식에서는, 링커는 글로벌 constructor　 　 이 사용되고 있는 것을 검지할 수 없습니다.

--warn-multiple-gp
    복수의 글로벌 포인터치가 출력 파일중에서 필요하게 되는 경우, 경고를 냅니다. 이 옵션은, Alpha 등의 특정의 프로세서에서만 의미가 있습니다. 구체적으로 말하면(자), 프로세서안에는 특별한 섹션중에 큰 값의 정수를 두는 것이 있습니다. 어느 특수한 레지스터 (글로벌 포인터)가 이 섹션의 중앙을 가리키고 있어 베이스 레지스터 상대의 addressing mode를 사용해, 정수를 효율적으로 읽어들일 수가 있습니다. 베이스 레지스터 상대 모드의 오프셋(offset)가, 고정으로 비교적 작다 (예를 들면 16bit) 모아 두어 이것에 의해 정수 area의 최대 사이즈가 제한되어 버립니다. 따라서, 큰 프로그램에서는, 모든 정수를 참조하기 위해서 복수의 글로벌 포인터치를 사용하는 것이 자주 필요합니다. 이 옵션을 지정하면(자), 이러한 케이스가 일어났을 때에 경고를 냅니다.

--warn-once
    각각의 미정도리 심볼에 대해서, 그것을 참조하고 있는 모듈마다 경고를 내는 것이 아니라, 다만 1 번만 경고를 냅니다.

--warn-section-align
    alignment에 의해 출력 섹션의 주소가 변경되었을 경우, 경고를 냅니다. 일반적으로는, alignment는 인풋 섹션에 의해 설정됩니다. 주소가 변경되는 것은, 그것이 명시적으로 지정되지 않았던 경우 뿐입니다. 즉, "SECTIONS" 명령이, 그 섹션의 개시 주소를 지정하지 않았던 경우입니다.

--whole-archive
    명령행상에서 --whole-archive 옵션의 뒤에 지정된 각 아카이브(archive)에 대해서, 그 archive파일안의 필요한 오브젝트 파일만을 검색하는 것이 아니라, 아카이브(archive)중의 모든 오브젝트를 링크에 포함합니다. 이것은 아카이브(archive)를 공유 프로그램 라이브러리로 변환할 때에 보통 사용되어 생성하는 공유 프로그램 라이브러리중에 모든 오브젝트를 강제적으로 수중에 넣습니다. 이 옵션은, 2 회 이상 사용해도 상관하지 않습니다.

    이 옵션을 gcc 로부터 사용할 때에, 2 개(살) 주의하는 일이 있습니다. 1 개째는, gcc 는 이 옵션을 모릅니다. 그러니까, -Wl, -whole-archive 와 지정하지 않으면 안됩니다. 2 개째는, 아카이브(archive)를 리스트 한 후 -Wl, -no-whole-archive 를 사용하는 것을 잊지 않게 해 주세요. 그렇다고 하는 것은, gcc 는 스스로 아카이브(archive)의 리스트를 링크에 추가하는 것이 있으므로, 여기에 따른 영향을 받지 않게 할 필요가 있기 때문입니다.

--wrap symbol
    symbol 에 대해서, 나팔 함수를 사용합니다. 모든 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);
            }
    --wrap malloc 를 사용해, 이 파일과 함께 다른 코드를 링크 했을 경우, 모든 "malloc" 호출은, 함수 "__wrap_malloc" 를 대신에 호출합니다. "__wrap_malloc" 중의 "__real_malloc" 가, 진짜 "malloc" 함수를 호출합니다.

    (와)과 같이 해 "__real_malloc" 함수도 준비해 두면(자), --wrap 옵션이 지정되지 않았던 경우에도 링크는 성공합니다. 그 경우에는, "__real_malloc" 의 정의를 "__wrap_malloc" 와 같은 파일에 대해서는 안됩니다. 이와 같이 하면(자), 링커가 그것을 "malloc" 로 랩 하기 전에, 어셈블러가 이 호출을 해결해 버릴지도 모릅니다.

--enable-new-dtags
--disable-new-dtags
    이 링커는, ELF 시스템의 새로운 동적 태그를 생성할 수가 있습니다. 그러나 낡은 ELF 시스템은, 그것들을 이해할 수 없는 경우가 있습니다. --enable-new-dtags 를 지정했을 경우, 동적 태그는 필요에 따라서 작성됩니다. --disable-new-dtags 를 지정했을 경우는, 새로운 동적 태그는 작성되지 않습니다. 디폴트에서는, 새로운 동적 태그는 작성되지 않습니다. 이러한 옵션은, ELF 시스템상에서만 이용 가능한 것으로 주의해 주세요.

i386 PE 링커는, -shared 옵션을 서포트하고 있습니다. 이것을 지정하면(자), 통상의 실행 형식은 아니고 동적 링크 프로그램 라이브러리 (DLL)를 출력합니다. 이 옵션을 사용했을 때에는, 이름을 "*.dll" 와 할 필요가 있습니다. 거기에 더해 링커는 표준의 "*.def" 파일을 완전하게 서포트하고 있어, 오브젝트 파일과 같게 링커의 명령행상에서 지정할 수 있습니다 (실제, 심볼을 export 하고 있는 아카이브(archive)의 전에 두어, 통상의 오브젝트 파일과 같게 링크 되는 것을 프로텍션할 필요가 있습니다).

모든 타겟으로 공통의 옵션에 가세해 i386 PE 의 링커는, i386 PE 타겟으로 고유의 명령행 옵션을 추가로 서포트하고 있습니다. 값을 받는 옵션은, 1 개의 공백이나 등호로 값과의 사이를 단락짓습니다.

--add-stdcall-alias
    이 옵션이 지정되었을 경우, stdcall 사픽스 (@nn)를 가진다 심볼을, 그대로 사픽스를 취해 export 합니다.

--base-file file
    dlltool 를 사용해 DLL 를 생성하는데 필요한 모든 재배치 정보의 베이스 주소를 세이브하는 파일명을 file 로 합니다.

--dll
    통상의 실행 형식 대신에 DLL 를 생성합니다. -shared 를 사용할 수도 있고, 지정했다 ".def" 파일중에서 "LIBRARY" 를 사용할 수도 있습니다.

--enable-stdcall-fixup
--disable-stdcall-fixup
    해결 불능인 심볼을 찾아내면(자), 링커는 「애매 링크」를 시도합니다. 이것은, 심볼명의 형식 (cdecl 대 stdcall)만이 다른 다른 정의 끝난 심볼을 찾아, 일치한 것으로 링크 하는 것으로 심볼을 해결합니다. 예를 들면, 미정도리 심볼 "_foo" 는, 함수 "_foo@12" 로 링크 되어 미정도리 심볼 "_bar@16" 는, 함수 "_bar" 로 링크 될지도 모릅니다. 링커가 이것을 실시할 때에, 경고를 표시합니다. 그렇다고 하는 것은, 통상은 링크에 실패해야 하는 것이기 때문입니다. 그러나, 써드파티의 DLL 로부터 생성된 임포트 라이브러리를 사용하는데, 이 기능이 가끔 필요한 일이 있습니다. --enable-stdcall-fixup 를 지정했을 경우, 이 기능은 완전하게 유효화 되어 경고는 출력되지 않습니다. --disable-stdcall-fixup 를 지정했을 경우, 이 기능은 무효화되어 그러한 불일치는 에러로 간주해집니다.

--export-all-symbols
    이 옵션이 지정되면(자), DLL 를 구축하는데 사용된다 오브젝트중의 모든 글로벌 심볼이, DLL 에 의해 export 됩니다. 이것은, 이렇게 하지 않으면 export 되는 심볼이 전혀 없는 경우, 디폴트가 되는 것에 주의해 주세요. 심볼이 DEF 파일에 의해 명시적으로 export 되는 경우나 함수 속성에 의해 암묵에 export 되는 경우는, 이 옵션이 지정되지 않는 이상 디폴트에서는 그 밖에 아무것도 export 되지 않습니다. 심볼 "DllMain@12", "DllEntryPoint@0", "DllMainCRTStartup@12", "impure_ptr" 는, 자동적으로는 export 되지 않습니다. 다른 DLL 로부터 임포트 된 심볼도, 다시 export 되지않고, "_head_" 로 시작되거나 "_iname" 로 끝나는 것 같은, DLL 의 내부 레이아웃을 지정하는 심볼도 export 되지 않습니다. 게다가 "libgcc", "libstd++", "libmingw32", "crtX.o" 로부터의 심볼도 export 되지 않습니다. "__rtti_" 나 "__builtin_" 로 시작되는 이름의 심볼도,C++ DLL 를 위해서(때문에) export 되지 않습니다. 마지막으로, export 되지 않는 Cygwin 의 비공개 심볼의 확장된 리스트도 있습니다 (분명하게, 이것은 Cygwin 타겟용의 DLL 를 구축할 때에 적용됩니다). 이것들 Cygwin 의 제외되는 심볼은 이하와 같습니다. "_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" 그리고 "environ" 입니다.

--exclude-symbols symbol, symbol,...
    자동적으로 export 해서는 안되는 심볼의 리스트를 지정합니다. 그러한 심볼명은, 콤마 혹은 코론으로 단락지어집니다.

--file-alignment
    파일의 alignment를 지정합니다. 파일중의 섹션은, 항상 이 배수의 파일 오프셋(offset)로부터 시작됩니다. 디폴트는 512 입니다.

--heap reserve
--heap reserve, commit
    이 프로그램의 heap area에 사용하기 위해서(때문에) 예약한다 (옵션으로 위탁한다) 메모리량을 지정합니다. 디폴트에서는 1Mb 가 예약되어 4K 가 위탁됩니다.

--image-base value
    프로그램 혹은 DLL 의 베이스 주소로서 value 를 사용합니다. 이것은, 프로그램 혹은 DLL 가 로드 되었을 때에 사용되는, 가장 저위의 메모리 위치가 됩니다. 재배치하는 필요성을 경감해, DLL 의 성능을 향상시키기 (위해)때문에, 각 DLL 는 일의인 베이스 주소를 가져, 다른 DLL 와 겹치지 않게 해야 합니다. 디폴트에서는, 실행 형식은 0x400000 로, DLL 는 0x10000000 입니다.

--kill-at
    이 옵션이 지정되면(자), stdcall 의 사픽스 (@nn)는, export 되기 전에 심볼로부터 제거됩니다.

--major-image-version value
    「이미지 버젼」의 메이저 넘을 설정합니다. 디폴트는 1 입니다.

--major-os-version value
    「OS 버젼」의 메이저 넘을 설정합니다. 디폴트는 4 입니다.

--major-subsystem-version value
    「하부조직 버젼」의 메이저 넘을 설정합니다. 디폴트는 4 입니다.

--minor-image-version value
    「이미지 버젼」의 마이나난바를 설정합니다. 디폴트는 0 입니다.

--minor-os-version value
    「OS 버젼」의 마이나난바를 설정합니다. 디폴트는 0 입니다.

--minor-subsystem-version value
    「하부조직 버젼」의 마이나난바를 설정합니다. 디폴트는 0 입니다.

--output-def file
    링커는, 생성하는 DLL 에 대응한 DEF 파일을 포함한다 파일 file 를 작성합니다. 이 DEF 파일 ("*.def" 로 불립니다)는, "dlltool" 를 사용해 임포트 라이브러리의 작성에 사용되거나 자동적으로 혹은 암묵에 export 되는 심볼에의 참조로서 사용 되거나 합니다.

--out-implib file
    링커는, 생성하는 DLL 에 대응한 임포트 라이브러리를 포함한다 파일 file 를 작성합니다. 이 임포트 라이브러리 ("*.dll.a" 혹은 "*.a" 로 불립니다)는, 생성된 DLL 를 클라이언트에 링크 하는데 사용됩니다. 이 동작에 의해, 따로 실시하는 "dlltool" 의 임포트 라이브러리 작성 스텝을 날릴 수가 있습니다.

--enable-auto-image-base
    "--image-base" 인수에 의해 지정되지 않았던 DLL 의 이미지 베이스를 자동적으로 선택합니다. DLL 명으로부터 생성되는 해시치를 사용하는 것으로, 각 DLL 에 대해서 일의의 이미지 베이스가 작성되어 프로그램의 실행을 지연 시킨다 메모리내에서의 충돌과 재배치를 회피할 수가 있습니다.

--disable-auto-image-base
    일의인 이미지 베이스를 자동적으로 작성하지 않습니다. 유저로부터 지정된 이미지 베이스 ("--image-base")가 없는 경우, 플랫폼의 디폴트를 사용합니다.

--dll-search-prefix string
    임포트 라이브러리를 사용하지 않고 DLL 를 동적으로 링크 할 때에, "lib<basename>.dll" 보다 "<string><basename>.dll" 를 먼저 검색합니다. 이 동작에 의해, 여러가지 "subplatforms" 용으로 만들어졌다 native, cygwin, uwin, pw 등의 DLL 를, 용이하게 구별할 수가 있습니다. 예를 들면, 일반적으로 Cygwin 의 DLL 는, "--dll-search-prefix=cyg" 를 사용합니다.

--enable-auto-import
    DLL 로부터 임포트 하는 데이터에 대해서, "_symbol" 를 "__imp__symbol" 로 공이 많이 든 링크를 해, 그러한 DATA 를 export 하는 DLL 의 구축에 즈음하여, 필요에 따라서 산크 (thunk) 한 심볼을 작성합니다. 일반적으로 이것은, 단지 잘됩니다. -- 그러나, 이하와 같은 메세지가 나오는 일이 있습니다.

    "variable '<var>' can't be auto-imported. Please read the documentation for ld's "--enable-auto-import" for details. "

    이 메세지는, 최종적으로 2 개의 정수의 화에 의해 지정되는 주소에 액세스 하는(서브) 식이 있는 경우에 발생합니다 (Win32 임포트 테이블은, 1 개(살)밖에 허락하고 있지 않습니다). 이것이 일어날 수 있는 경우라고 하는 것은, DLL 로부터 임포트 된 구조체 변수의 필드 멤버에 액세스 하는 경우나, DLL 로부터 임포트 되었다 배열 변수에 대해서 정수의 인덱스를 사용하는 경우등이 있습니다. 모든 복수 워드의 변수 (배열, 구조체, long long 등)는, 이 에러 조건을 일으키는 일이 있습니다. 그러나, 이 export 된 시큰둥한 변수가, 실제 어떤 데이터 타입으로 있어도, ld 는 항상 이것을 검지해, 경고를 발표해, 정지합니다.

    export 된 변수의 데이터 타입이 무엇으로 있으려고, 이 문제를 해소할 방법이 몇개인가 있습니다.

    최초의 해결책은, 정수의 1 개를 강제적으로 변수로서 끝내는 것입니다. -- 즉, 컴파일시에 불명해 최적화 불가로 하는 것입니다. 배열에 대해서는, 2 개의 방법이 생각됩니다. a) 인덱스 되는 측 (배열의 주소)을 변수로 합니다. 혹은, b) 정수 인덱스를 변수로 합니다. 따라서 이하와 같이 됩니다:

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

            extern type extern_array[];
            extern_array[1] -->
               { volatile int t=1; extern_array[t] }
    구조체 (나, 다른 대부분의 복수 워드 데이터 타입)에 대해서는, 구조체 그 자체 (혹은 long long 등)를 변수로 하는 것이, 유일한 방법입니다.

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

            extern long long extern_ll;
            extern_ll -->
              { volatile long long * local_ll=&extern_ll; *local_ll }
    이 문제를 취급하는 2 번째의 방법은, 시큰둥한 심볼을 「자동 임포트」하는 것을 멈추어, "__declspec(dllimport)" 와 표시를 하는 것입니다. 그러나 실제로 이것을 하려면 , 컴파일시에 #define 를 사용해, DLL 를 구축하려고 하고 있는지, 혹은 DLL 와 링크 한다 클라이언트 코드를 구축하려고 하고 있는지, 또는 단지 정적 프로그램 라이브러리를 구축/링크 하려고 하고 있는지를 나타내지 않으면 안됩니다. 「정수 오프셋(offset)를 이용한 직접 주소」문제를 해결하는 몇개의 방법을 선택할 때에, 일반적인 현실 세계에서의 사용 방법을 생각하지 않으면 안됩니다:

    원래의 코드:

            --foo.h
            extern int arr[];
            --foo.c
            #include "foo.h"
            void main(int argc, char **argv){
              printf("%d\n", arr[1]);
            }
    해결책 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]);
            }
    해결책 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]);
            }
    이 문제를 회피하는 3 번째의 방법은, 시큰둥한 변수에 대한 액세스를, 데이터를 직접 사용하는 인터페이스가 아니고, 함수의 인터페이스를 사용하는 듯 프로그램 라이브러리를 고쳐 쓰는 것입니다 (예를 들면 set_foo() 와 get_foo() 액세스 함수를 사용합니다).

--disable-auto-import
    DLL 로부터 임포트 한 데이터에 대해서, "_symbol" 를 "__imp__symbol" 로, 공이 많이 든 링크를 하지 않게 합니다.

--enable-extra-pe-debug
    자동 임포트 한 심볼의 산크에 관해서, 부가적인 디버그 정보를 나타냅니다.

--section-alignment
    섹션의 alignment를 설정합니다. 메모리중의 섹션은, 항상 이 배수의 주소로부터 시작됩니다. 디폴트는 0x1000 입니다.

--stack reserve
--stack reserve, commit
    프로그램의 스택에 사용하기 위해서(때문에) 예약한다 (옵션으로 위탁한다) 메모리량을 지정합니다. 디폴트에서는 2Mb 가 예약되어 4K 가 위탁됩니다.

--subsystem which
--subsystem which:major
--subsystem which:major.minor
    프로그램이 실행되는 하부조직을 지정합니다. which 의 값으로 유효한 것은, "native", "windows", "console" 그리고 "posix" 입니다. 옵션으로, 하부조직의 버젼도 지정할 수도 있습니다.

환경 변수
환경 변수 "GNUTARGET", "LDEMULATION" 그리고 "COLLECT_NO_DEMANGLE" 를 이용해, ld 의 동작을 변경할 수가 있습니다.

"GNUTARGET" 는, -b (혹은 그 별명의 --format)(이)가 지정되지 않았던 경우, 입력 파일의 오브젝트 형식을 결정하는데 사용됩니다. 그 값은, 입력 형식에 대한 BFD 명의 1 개가 아니면 안됩니다. 환경 변수 "GNUTARGET" 가 정의되어 있지 않은 경우, ld 는, 그 타겟으로 가장 자연스러운 형식을 사용합니다. "GNUTARGET" 가 "default" 에 설정되어 있었을 경우, BFD 는, 바이너리 입력 파일을 검사해 인풋 형식을 결정하려고 합니다. 이 방법은 대체로의 경우 성공합니다만, 잠재적인 애매함이 남습니다. 그렇다고 하는 것은, 오브젝트 파일의 형식을 지정하는데 사용된다 magic number가 일의인 것을 프로텍션할 방법이 없기 때문입니다. 그러나, 각각의 시스템상에서의 BFD 의 구성 과정에 대해, 그 시스템의 관습적인 포맷이 검색 리스트의 선두에 놓여지므로, 이 애매함은 관습적인 물건에 유리하게 되도록(듯이) 해결됩니다.

"LDEMULATION" 는, -m 옵션이 지정되지 않았던 경우, 디폴트의 에뮬레이션을 결정하는데 사용됩니다. 에뮬레이션은, 링커의 동작의 여러가지 면, 특히 디폴트의 링커 스크립트에 영향을 줍니다. 이용 가능한 에뮬레이션의 일람은, --verbose 혹은 -V 옵션을 지정하는 것으로 표시할 수 있습니다. -m 옵션이 사용되지 않고, "LDEMULATION" 환경 변수도 정의되어 있지 않았던 경우, 디폴트의 에뮬레이션은, 링커가 어떻게 구성되었는지를 의존합니다.

통상, 링커는 디폴트로 심볼을 데망르 합니다. 그러나, "COLLECT_NO_DEMANGLE" 환경 변수가 설정되었을 경우는, 디폴트로 심볼을 데망르 하지 않습니다. 이 환경 변수는, gcc 의 링커 나팔 프로그램에서도와 같이 사용되고 있습니다. 디폴트는, --demangle 와 --no-demangle 옵션으로 덧쓰기할 수가 있습니다.

관련 항목
ar(1), nm(1), objcopy(1), objdump(1), readelf(1) 그리고 Info 의 binutils 와 ld 항.

COPYRIGHT
Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

사례
이 일본어 번역의 작성에 해당해, SRA 의 야부키씨 (yabuki@sra.co.jp)의 (뜻)이유를 참고로 했습니다.