[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.11 リンクオプション

以下のオプションは、コンパイラがオブジェクトファイルを実行形式 ファイルにリンクするときに関係してくる。コンパイラがリンクの段階を 行なわないなら、これらは意味がない。

object-file-name

特別に認識されるサフィックスで終わっていないファイル名は、 オブジェクトファイルかライブラリを示すものと考えられる。 (オブジェクトファイルは、ファイルの内容に従って、リンかにより ライブラリと区別される。)リンクが行なわれると、これらのオブジェクトファイルは リンカへの入力として使われる。

-c
-S
-E

これらのオプションのどれかが指定されると、リンカは起動されない。 また、オブジェクトファイル名は引数として与えるべきではない。 See section 出力の種類の制御オプション.

-llibrary

リンク時に library という名前のライブラリを検索する。

このオプションをコマンド行のどこに置いたかで違いが出てくる。 リンカは、ライブラリとオブジェクトファイルを指定された順番に検索し、 処理する。すなわち、‘foo.o -lz bar.o’ とした場合、 ライブラリ ‘z’ は、ファイル ‘foo.o’ の後で、‘bar.o’ の前に 検索される。もし ‘bar.o’ が ‘z’ 内の関数を参照していても、 その関数はロードされない。

リンカは、標準のディレクトリのリストからライブラリを探す。 次に、見つけたファイルを、正確な名前で指定されたかのように使う。

検索されるディレクトリには、幾つかの標準のシステムディレクトリに の他に、‘-L’ で指定したディレクトリが加わる。

普通こうして見つかるファイルはライブラリファイル、すなわちオブジェクト ファイルをメンバとするアーカイブファイルである。リンカのアーカイブ ファイルの扱い方は、アーカイブファイルを走査して、これまでに参照 されているが定義はされていないシンボルを定義しているメンバオブジェクト ファイルを探す。だが、こうして見つけたファイルが通常のオブジェクトファイル だった場合は、普通にリンクされる。‘-l’ オプションを使うのと ファイル名を指定するのとの違いは、‘-l’ は library の前後に ‘lib’ と ‘.a’ を付けて、色々なディレクトリを検索するという 点にある。

-lobjc

この特別な ‘-l’ オプションは、Objective C のプログラムを リンクするのに必要である。

-nostartfiles

リンク時にシステム標準の起動ファイルを使わない。 システムの標準ライブラリの方は、-nostdlib-nodefaultlibs を指定しない限り、普通は使われる。

-nodefaultlibs

リンク時にシステム標準のライブラリを使わない。 明示的に指定したライブラリだけがリンカに渡される。 -nostartfiles を指定しない限り、標準の起動ファイルが 普通は使われる。 GCC は System V (それに ANSI C) の環境向けには memcmp、memset、memcpy の呼出しを生成し、BSD 環境向けには bcopy と bzero の呼出しを生成するだろう。これらのエントリは通常 libc 内のエントリで 解決される。これらのエントリ・ポイントは、このオプションが指定された 時には、何か他の仕組みによって提供される必要がある。

-nostdlib

リンク時に、システム標準の起動ファイルやライブラリを使わない。 リンカには、起動ファイルは渡されず、ライブラリは明示的に指定したものだけが 渡される。 GCC は System V (それに ANSI C) の環境向けには memcmp、memset、memcpy の呼出しを生成し、BSD 環境向けには bcopy と bzero の呼出しを生成するだろう。これらのエントリは通常 libc 内のエントリで 解決される。これらのエントリ・ポイントは、このオプションが指定された 時には、何か他の仕組みによって提供される必要がある。

-nostdlib’ と ‘-nodefaultslibs’ に影響を受けない標準ライブラリの 一つに ‘libcc.a’ がある。これは、GCC が内部的に使うサブルーチン ライブラリであり、特定の機種の機能の不足や、幾つかの言語で特別に 必要になる機能を提供するものである。 (‘libgcc.a’ についてのさらに詳しい議論については、 See section Interfacing to GCC Output.) ほとんどの場合、他の標準ライブラリを使いたくないときでも ‘libgcc.a’ は必要になる。言い換えると、‘-nostdlib’ や ‘-nodefaultlibs’ を 指定するときには、普通は ‘-lgcc’ も指定すべきである。 これにより、GCC 内部のライブラリサブルーチンに対する未解決参照が なくなることを保証する。 (例えば、‘__main’ は、C++ のコンストラクタが呼ばれることを 保証するのに使われる。see section collect2。)

-s

実行形式から、シンボルテーブルと再配置情報を全て削除する。

-static

ダイナミックリンクをサポートしているシステムでは、このオプションを 指定すると共有ライブラリとリンクするのを防ぐ。 他のシステムでは、このオプションは何の効果もない。

-shared

他のオブジェクトとリンクして実行形式を作ることが可能な共有オブジェクトを 生成する。このオプションは全てのシステムではサポートされていない。 システムによっては、このオプションを指定するときには、‘-fpic’ や ‘-fPIC’ を指定しなければならない。

-symbolic

共有オブジェクトを構築する際に、グローバルシンボルに対する参照を 結合する。未解決の参照については警告を出す (ただし、リンクエディタのオプション ‘-Xlinker -z -Xlinker defs’ が 指定されていない場合)。 このオプションをサポートしているシステムは、二、三種類しかない。

-Xlinker option

option をリンカへのオプションとして渡す。 これを使うと、GCC には認識する方法が分からない、システム固有の リンカオプションを指定することができる。

引数を取るオプションを渡したい場合は、‘-Xlinker’ を 二回指定しなければならない。一つはそのオプション用で、もう一つは 引数用である。 例えば、‘-assert definitions’ を渡すには、 ‘-Xlinker -assert -Xlinker definitions’ と書かなければならない。 ‘-Xlinker "-assert definitions"’ と書いたのではうまくいかない。 何故なら、これは文字列全体を一個の引数として渡すので、リンカが期待 しているのとは違ってしまうからである。

-Wl,option

option をリンカへのオプションとして渡す。 option にカンマが含まれていると、コンマのところで複数の オプションに分割される。

-u symbol

シンボル symbol を未定義とし、そのシンボルを定義している ライブラリモジュールを強制的にリンクする。 ‘-u’ をオプションを複数、異なるシンボルに対して使うと、 追加でライブラリモジュールを強制的にロードできる。


This document was generated using texi2html 1.78.