これは、Ubuntu Online、Fedora Online、Windowsオンラインエミュレータ、MAC OSオンラインエミュレータなど、複数の無料オンラインワークステーションのいずれかを使用して、OnWorks無料ホスティングプロバイダーで実行できるコマンドi686-linux-gnu-ldです。
プログラム:
NAME
ld-GNUリンカー
SYNOPSIS
ld [オプション] オブジェクトファイル ...
DESCRIPTION
ld 多数のオブジェクト ファイルとアーカイブ ファイルを結合し、それらのデータを再配置します
シンボル参照を結び付けます。 通常、コンパイルの最後のステップ
プログラムが実行されます ld.
ld のスーパーセットで記述されたリンカー コマンド言語ファイルを受け入れます
AT&T のリンク エディター コマンド言語構文。
リンクプロセスを完全に制御します。
このマニュアルページでは、コマンド言語については説明していません。 を参照してください ld エントリ
コマンド言語およびその他の側面の詳細については、「info」を参照してください。
GNUリンカの。
このバージョンの ld 汎用BFDライブラリを使用して操作します
オブジェクトファイル。 これにより、 ld オブジェクトファイルの読み取り、結合、および書き込み
たとえば、COFF や "a.out" など、さまざまな形式で。 違う
フォーマットをリンクして、利用可能な任意の種類のオブジェクトを生成できます
ファイルにソフトウェアを指定する必要があります。
柔軟性は別として、GNU リンカは他のリンカよりも便利です。
診断情報を提供するリンカー。 多くのリンカーは放棄します
エラーが発生するとすぐに実行します。 いつでも可能なとき、 ld
実行を継続し、他のエラー (または、一部のエラー) を特定できるようにします。
エラーにもかかわらず出力ファイルを取得する場合)。
GNUリンカー ld 幅広い状況をカバーすることを意図しており、
他のリンカーと可能な限り互換性があります。 その結果、あなたは
その動作を制御するための多くの選択肢。
OPTIONS
リンカは多数のコマンドライン オプションをサポートしていますが、実際には
特定のコンテキストで使用されるものはほとんどありません。 例えば、
の頻繁な使用 ld 上の標準 Unix オブジェクト ファイルをリンクすることです。
標準でサポートされている Unix システム。 そのようなシステムでは、ファイルをリンクするには
"こんにちは.o":
します/lib/crt0.o hello.o -lc
これは ld と呼ばれるファイルを生成するには 出力 リンクした結果として
「hello.o」とライブラリ「libc.a」を含むファイル「/lib/crt0.o」。
標準の検索ディレクトリから取得されます。 (の議論を参照してください
-l 以下のオプション。)
コマンドラインオプションの一部 ld の任意の時点で指定できます。
コマンドライン。 ただし、次のようなファイルを参照するオプション -l or
-T、オプションが表示された時点でファイルが読み取られるようにします
コマンドラインで、オブジェクトファイルと他のファイルに相対的
オプション。 異なる引数でファイル以外のオプションを繰り返すと、
それ以上の効果がないか、以前の発生を上書きします(それら
そのオプションのコマンド ラインのさらに左側)。 オプション
意味のある意味で複数回指定される場合があります。
以下の説明。
オプション以外の引数は、オブジェクト ファイルまたはアーカイブであり、
一緒にリンクされています。 それらは、後に続くか、先行するか、または混合される可能性があります
ただし、オブジェクト ファイルの引数は指定できない場合があります。
オプションとその引数の間に置かれます。
通常、リンカーは少なくとも XNUMX つのオブジェクト ファイルで呼び出されますが、
を使用して、他の形式のバイナリ入力ファイルを指定できます -l, -R、 そしてその
スクリプト コマンド言語。 もしも いいえ バイナリ入力ファイルはまったく
指定されている場合、リンカは出力を生成せず、
メッセージ いいえ ファイル.
リンカがオブジェクト ファイルの形式を認識できない場合、
リンカー スクリプトであると仮定します。 このように指定されたスクリプト
リンクに使用されるメイン リンカー スクリプトを拡張します (デフォルト
リンカースクリプトまたはを使用して指定されたもの -T)。 この機能により、
オブジェクトまたは
アーカイブしますが、実際には単にいくつかのシンボル値を定義するか、使用します
他のオブジェクトをロードするには、「INPUT」または「GROUP」。 この中にスクリプトを指定する
方法は、追加のコマンドを使用して、メインのリンカー スクリプトを拡張するだけです。
メインスクリプトの後に配置。 使用 -T デフォルトを置き換えるオプション
ただし、「INSERT」コマンドの効果に注意してください。
名前が XNUMX 文字のオプションの場合、オプション引数は
間に空白を入れずにオプション文字に従うか、
というオプションの直後に別の引数として与えられます。
それらが必要です。
名前が複数文字のオプションの場合は、ダッシュ XNUMX つまたは XNUMX つ
オプション名の前に置くことができます。 例えば、 -トレースシンボル
--トレース記号 同等です。 注 --- これには例外が XNUMX つあります。
ルール。 小文字の「o」で始まる複数の文字オプション
前にダッシュを XNUMX つだけ付けます。 これは、
-o オプション。 たとえば -オーマジック 出力ファイル名をに設定します マジック
一方 --オーマジック 出力に NMAGIC フラグを設定します。
複数文字オプションの引数は、複数文字オプションから分離する必要があります。
等号によるオプション名、または個別の引数として指定
それらを必要とするオプションの直後。 例えば、
--トレース記号 foo --trace-symbol = foo 同等です。 個性的
複数文字オプションの名前の省略形が受け入れられます。
注---リンカがコンパイラドライバを介して間接的に呼び出されている場合
(例えば gccの) の場合、すべてのリンカー コマンド ライン オプションに接頭辞を付ける必要があります。
by -Wl、 (または、特定のコンパイラ ドライバに適したもの)
このような:
gcc -Wl、-start-group foo.o bar.o -Wl、-end-group
これは重要です。そうしないと、コンパイラ ドライバ プログラムが
リンカ オプションを黙ってドロップし、結果として不良リンクが発生します。 錯乱
を介して値を必要とするオプションを渡すときにも発生する可能性があります
オプションと引数の間のスペースの使用は
セパレーター、およびドライバーがオプションのみをリンカーに渡すようにします
そしてコンパイラへの引数。 この場合、使用するのが最も簡単です
次のような、単一文字オプションと複数文字オプションの結合形式。
gcc foo.o bar.o -Wl、-eENTRY -Wl、-Map = a.map
で受け入れられる一般的なコマンド ライン スイッチの表を次に示します。
GNU リンカ:
@file
からコマンドラインオプションを読み取る file。 読み取ったオプションが挿入されます
元の@の代わりにfile オプション。 場合 file 存在しない、または
読み取ることができない場合、オプションは文字通りに扱われ、
除去された。
オプションで file 空白で区切られます。 空白
全体を囲むことにより、オプションに文字を含めることができます
一重引用符または二重引用符で囲むオプション。 任意の文字(含む
バックスラッシュ)は、文字の前に付けることで含めることができます
バックスラッシュが含まれています。 NS file それ自体が追加で含まれている可能性があります
@file オプション; このようなオプションはすべて再帰的に処理されます。
-a キーワード
このオプションは、HP / UXの互換性のためにサポートされています。 NS キーワード
引数は文字列の XNUMX つでなければなりません アーカイブ, sharedまたは デフォルト.
-アーカイブ 機能的には同等です -Bスタティック、および他の XNUMX つ
キーワードは機能的に同等です -バダイナミック。 このオプションは
何度でも使えます。
- 監査 オーディリブ
追加 オーディリブ 動的セクションの「DT_AUDIT」エントリに移動します。
オーディリブ の存在はチェックされず、
ライブラリで指定された DT_SONAME。 複数指定した場合
「DT_AUDIT」には、コロンで区切られた監査インターフェースのリストが含まれます
使用する。 リンカが監査エントリを持つオブジェクトを見つけた場合、
共有ライブラリを検索すると、対応するライブラリが追加されます
出力ファイルの「DT_DEPAUDIT」エントリ。 このオプションは
rtld-audit インターフェースをサポートする ELF プラットフォームで意味があります。
-A 建築
-アーキテクチャ=建築
の現在のリリースでは ld、このオプションは
Intel 960 ファミリーのアーキテクチャ。 その中で ld 構成、
建築 引数は、特定のアーキテクチャを識別します
960ファミリー、いくつかの保護を有効にし、アーカイブを変更します-
ライブラリ検索パス。
の将来のリリース ld 他の同様の機能をサポートする場合があります
建築家系。
-b 入力形式
--format =入力形式
ld 複数の種類のオブジェクト ファイルをサポートするように構成できます。
もしあなたの ld このように構成されている場合は、 -b オプション
これに続く入力オブジェクト ファイルのバイナリ形式を指定する
コマンドラインのオプション。 ときでさえ ld サポートするように構成されています
通常、これを指定する必要はありません。
as ld デフォルトの入力形式として期待するように構成する必要があります
各マシンで最も一般的な形式。 入力形式 はテキスト文字列です。
BFD ライブラリでサポートされている特定の形式の名前。
(使用可能なバイナリ形式を一覧表示するには、 オブジェクトダンプ -i.)
ファイルを
珍しいバイナリ形式。 使用することもできます -b フォーマットを切り替える
明示的に (異なる形式のオブジェクト ファイルをリンクする場合)、
配合工業用化学製品の -b 入力形式 オブジェクトファイルの各グループの前に
特定のフォーマット。
デフォルトのフォーマットは環境変数から取得されます
「グヌターゲット」。
を使用して、スクリプトから入力形式を定義することもできます。
コマンド「ターゲット」;
-c MRIコマンドファイル
--mri-script =MRIコマンドファイル
MRIによって生成されたリンカーとの互換性のために、 ld スクリプトを受け入れる
代替の制限されたコマンド言語で書かれたファイル、
GNU ld の MRI 互換スクリプト ファイル セクションに記載されています。
ドキュメンテーション。 オプションで MRI スクリプト ファイルを導入する -c; 使用する
-T 汎用で記述されたリンカースクリプトを実行するオプション
ld スクリプト言語。 もしも MRI コマンドファイル 存在しない、 ld 探す
で指定されたディレクトリにある -L オプション。
-d
-dc
-dp これら XNUMX つのオプションは同等です。 複数のフォームがサポートされています
他のリンカーとの互換性のため。 彼らはコモンにスペースを割り当てます
シンボルは、再配置可能な出力ファイルが指定されている場合でも ( -r).
スクリプト コマンド「FORCE_COMMON_ALLOCATION」も同じ効果があります。
--校長 オーディリブ
-P オーディリブ
追加 オーディリブ 動的セクションの「DT_DEPAUDIT」エントリに移動します。
オーディリブ の存在はチェックされず、
ライブラリで指定された DT_SONAME。 複数指定した場合
「DT_DEPAUDIT」には、コロンで区切られた監査のリストが含まれます
使用するインターフェイス。 このオプションは、ELF プラットフォームでのみ意味があります
rtld-audit インターフェースのサポート。 -P オプションは、
ソラリス互換。
-e エントリ
--entry =エントリ
エントリ あなたの実行を開始するための明示的なシンボルとして
デフォルトのエントリ ポイントではなく、プログラム。 ない場合
シンボル名 エントリ、リンカーは解析を試みます エントリ 数として、
それをエントリアドレスとして使用します(番号は解釈されます
基数 10; あなたは先頭を使用することができます 0x 基数16、またはリーディング 0
ベース8)。
--exclude-libs リブ,リブ、...
シンボルが含まれてはならないアーカイブ ライブラリのリストを指定します
自動的にエクスポートされます。 ライブラリ名は、
コンマまたはコロン。 「--exclude-libs ALL」を指定すると、シンボルが除外されます
自動エクスポートからすべてのアーカイブ ライブラリに。 このオプションは
リンカの i386 PE ターゲット ポートと
ELF ターゲット ポート。 i386 PE の場合、明示的にリストされているシンボル
このオプションに関係なく、.def ファイルは引き続きエクスポートされます。 エルフ用
対象のポート、このオプションの影響を受けるシンボルは次のように扱われます。
非表示。
--implib のモジュールを除外する モジュール,モジュール、...
オブジェクト ファイルまたはアーカイブ メンバーのリストを指定します。
シンボルは自動的にエクスポートされるべきではありませんが、どのシンボルをエクスポートする必要がありますか?
中に生成されているインポート ライブラリに卸売りをコピーします。
リンク。 モジュール名はコンマまたはコロンで区切ることができます。
によって使用されるファイル名と正確に一致する必要があります ld ファイルを開く。 為に
アーカイブ メンバー。これは単なるメンバー名ですが、オブジェクトの場合は
リストされたファイルには、任意のパスが含まれ、正確に一致する必要があります
リンカーのコマンドラインで入力ファイルを指定するために使用されます。 これ
オプションは、i386 PE ターゲット ポートでのみ使用できます。
リンカ。 .def ファイルに明示的にリストされているシンボルは引き続き
このオプションに関係なく、エクスポートされます。
-E
--エクスポート-動的
--no-export-dynamic
動的にリンクされた実行可能ファイルを作成する場合、 -E オプション
または --エクスポート-動的 オプションにより、リンカーはすべてのシンボルを追加します
ダイナミック シンボル テーブルに。 ダイナミック シンボル テーブルはセットです
実行時に動的オブジェクトから見えるシンボルの。
これらのオプションのいずれも使用しない場合(または
--no-export-dynamic デフォルトの動作を復元するオプション)、
ダイナミック シンボル テーブルには、通常、ダイナミック シンボル テーブルには、
リンクに記載されている動的オブジェクトによって参照されています。
「dlopen」を使用して、参照する必要がある動的オブジェクトをロードする場合
他のシンボルではなく、プログラムによって定義されたシンボルに戻る
動的オブジェクトの場合、おそらくこのオプションを使用する必要があります。
プログラム自体をリンクします。
動的リストを使用して、どのシンボルを制御するかを制御することもできます
出力形式がサポートしている場合、ダイナミック シンボル テーブルに追加されます。
の説明を参照してください -動的リスト.
このオプションは、ELF ターゲット ポートに固有であることに注意してください。 PE
ターゲットは、DLL からすべてのシンボルをエクスポートする同様の機能をサポートします
またはEXE; の説明を参照してください --すべてのシンボルをエクスポート を参照してください。
-EB ビッグエンディアンオブジェクトをリンクします。 これは、デフォルトの出力形式に影響します。
-THE リトルエンディアン オブジェクトをリンクします。 これはデフォルトの出力に影響します
形式でダウンロードすることができます。
-f 名
--auxiliary =名
ELF 共有オブジェクトを作成するときは、内部 DT_AUXILIARY を設定します
フィールドを指定された名前に変更します。 これは、動的リンカーに次のことを伝えます。
共有オブジェクトのシンボル テーブルは、
共有オブジェクトのシンボル テーブルの補助フィルター 名.
後でこのフィルター オブジェクトに対してプログラムをリンクすると、
プログラムを実行すると、ダイナミック リンカーは DT_AUXILIARY を参照します。
分野。 動的リンカーがフィルターからシンボルを解決する場合
オブジェクトに定義があるかどうかを最初にチェックします。
共有オブジェクト 名. ある場合は、代わりに使用されます
フィルター オブジェクトの定義。 共有オブジェクト 名 必要
存在しない。 したがって、共有オブジェクト 名 を提供するために使用される場合があります。
特定の機能の代替実装、おそらく
デバッグまたはマシン固有のパフォーマンス。
このオプションは複数回指定できます。 DT_AUXILIARY
エントリは、
コマンドライン。
-F 名
--filter =名
ELF 共有オブジェクトを作成するときは、内部 DT_FILTER を設定します
フィールドを指定された名前に変更します。 これは、動的リンカーに次のことを伝えます。
作成中の共有オブジェクトのシンボルテーブルは
共有オブジェクトのシンボル テーブルのフィルターとして使用される 名.
後でこのフィルター オブジェクトに対してプログラムをリンクすると、
プログラムを実行すると、動的リンカーは DT_FILTER を参照します
分野。 動的リンカーは、シンボルを次のように解決します。
フィルター オブジェクトのシンボル テーブルは通常どおりですが、実際には
共有オブジェクトで見つかった定義へのリンク 名。 したがって、
フィルター オブジェクトを使用して、シンボルのサブセットを選択できます
オブジェクトによって提供される 名.
一部の古いリンカーは、 -F コンパイル全体のオプション
入力と両方のオブジェクト ファイル形式を指定するためのツールチェーン
オブジェクトファイルを出力します。 GNU リンカーは、このために他のメカニズムを使用します。
目的: -b, - フォーマット, --oformat オプション、「TARGET」コマンド
リンカースクリプト、および「GNUTARGET」環境変数。 の
GNU リンカーは、 -F ELF を作成しない場合のオプション
共有オブジェクト。
-fini =名
ELF 実行可能ファイルまたは共有オブジェクトを作成するときは、次の場合に NAME を呼び出します。
DT_FINI を
関数のアドレス。 デフォルトでは、リンカは「_fini」を使用します
呼び出す関数として。
-g 無視されます。 他のツールとの互換性のために提供されています。
-G 値
--gpsize =値
GP を使用して最適化するオブジェクトの最大サイズを設定する
登録する サイズ. これは、オブジェクト ファイル形式に対してのみ意味があります。
大小のオブジェクトの挿入をサポートする MIPS ELF など
異なるセクション。 これは、他のオブジェクト ファイル形式では無視されます。
-h 名
-soname =名
ELF 共有オブジェクトを作成するときは、内部 DT_SONAME を設定します
フィールドを指定された名前に変更します。 実行可能ファイルが
DT_SONAME フィールドを持つ共有オブジェクトの場合、実行可能ファイルが
動的リンカーが実行され、共有オブジェクトのロードが試行されます
ファイルを使用するのではなく、DT_SONAME フィールドで指定
リンカーに付けられた名前。
-i インクリメンタルリンクを実行します(オプションと同じ) -r).
-init =名
ELF 実行可能ファイルまたは共有オブジェクトを作成するときは、次の場合に NAME を呼び出します。
DT_INIT を
関数のアドレス。 デフォルトでは、リンカーは「_init」を使用します
呼び出す関数として。
-l 名前仕様
--library =名前仕様
で指定されたアーカイブまたはオブジェクトファイルを追加します 名前仕様 の一覧に
リンクするファイル。 このオプションは何度でも使用できます。 もしも
名前仕様 次の形式です :ファイル名, ld ライブラリパスを検索します
というファイルの場合 ファイル名、それ以外の場合はライブラリを検索します
というファイルのパス libnamespec.a.
共有ライブラリをサポートするシステムでは、 ld を検索することもできます
以外のファイル libnamespec.a. 具体的には、ELF と SunOS で
Nz - Nasyonal Mache dechanj nan peyi Zend limite ld と呼ばれるライブラリのディレクトリを検索します
libnamespec.so と呼ばれるものを検索する前に libnamespec.a。 (に
慣例では、「.so」拡張子は共有ライブラリを示します。) 注意
この動作が適用されないこと :ファイル名、いつも
というファイルを指定します ファイル名.
リンカは、次の場所でアーカイブを XNUMX 回だけ検索します。
コマンドラインで指定します。 アーカイブが
の前に出現したオブジェクトで定義されていなかったシンボル
コマンドラインでアーカイブすると、リンカーには
アーカイブからの適切なファイル。 ただし、未定義シンボル
コマンドラインの後半に現れるオブジェクトでは、
リンカーを使用して、アーカイブを再度検索します。
ジョブの設定方法については、 -( リンカーにアーカイブを検索させる方法のオプション
複数回。
コマンドラインで同じアーカイブを複数回リストすることができます。
このタイプのアーカイブ検索は、Unix リンカの標準です。
ただし、使用している場合は、 ld AIX とは異なることに注意してください。
AIX リンカーの動作。
-L 検索ディレクトリ
--library-path =検索ディレクトリ
パスを追加 検索ディレクトリ パスのリストに ld 検索します
アーカイブ ライブラリと ld 制御スクリプト。 このオプションを使用できます
何度でも。 ディレクトリは次の順序で検索されます。
コマンドラインで指定します。 ディレクトリ
コマンドラインで指定されたものは、デフォルトの前に検索されます
ディレクトリ。 全て -L オプションはすべてに適用されます -l 関係なく、オプション
オプションが表示される順序。 -L オプションは影響しません
の ld リンカースクリプトを検索しない限り -T オプションが指定されています。
If 検索ディレクトリ 「=」で始まり、「=」は
シスルート 接頭辞によって制御されます。 --sysroot オプション、または指定
リンカーが構成されているとき。
検索されたパスのデフォルトセット(で指定されていない) -L)
エミュレーションモードによって異なります ld を使用しており、場合によってはまた
それがどのように構成されたかについて。
パスは、リンク スクリプトで指定することもできます。
「SEARCH_DIR」コマンド。 このように指定されたディレクトリが検索されます
コマンドでリンカー スクリプトが表示されるポイント
ライン。
-m emulation
エミュレートする emulation リンカ。 利用可能なリストを表示できます
とのエミュレーション -詳細 or -V オプション。
Status -m オプションを使用しない場合、エミュレーションは
「LDEMULATION」環境変数 (定義されている場合)。
それ以外の場合、デフォルトのエミュレーションはリンカーの状態によって異なります
構成されました。
-M
--print-map
リンク マップを標準出力に出力します。 リンク マップが提供する
以下を含む、リンクに関する情報:
・オブジェクトファイルがメモリにマップされる場所。
・共通シンボルの割り当て方法。
· リンクに含まれるすべてのアーカイブ メンバー。
アーカイブメンバーが持ち込まれる原因となったシンボル。
・シンボルに割り当てられた値。
注 - 値が次の式によって計算されるシンボル
同じシンボルの以前の値への参照を含む
リンク マップに正しい結果が表示されません。 これは
リンカーは中間結果を破棄し、
式の最終値を保持します。 そのような下で
状況に応じて、リンカーは最終的な値を表示します。
角かっこで。 したがって、たとえばリンカースクリプト
含む:
フー=1
フー = フー * 4
フー = フー + 8
次の場合、リンクマップに次の出力が生成されます。 -M
オプションが使用されます:
0x00000001 フー = 0x1
[0x0000000c] foo =(foo * 0x4)
[0x0000000c] foo =(foo + 0x8)
詳細はこちら: 式 の式の詳細については、
リンカー スクリプト。
-n
--nmagic
セクションのページ配置をオフにし、リンクを無効にします
共有ライブラリ。 出力形式が Unix スタイルのマジックをサポートしている場合
数字、出力を「NMAGIC」としてマークします。
-N
--オーマジック
テキスト セクションとデータ セクションを読み取りおよび書き込み可能に設定します。 また、
データセグメントをページアラインせず、リンクを無効にします
共有ライブラリ。 出力形式が Unix スタイルのマジックをサポートしている場合
番号、出力を「OMAGIC」としてマークします。 注: 書き込み可能ですが、
テキスト セクションは PE-COFF ターゲットに許可されますが、準拠していません。
Microsoft が公開しているフォーマット仕様。
--ノーマジック
このオプションは、 -N オプション。 設定します
テキスト セクションを読み取り専用にし、データ セグメントを強制的に読み取り専用にします。
ページ揃え。 注 - このオプションでは、リンクは有効になりません
共有ライブラリ。 使用する -バダイナミック このため。
-o 出力
--output =出力
出力 によって作成されたプログラムの名前として ld; これなら
オプションが指定されていない、名前 アウト がデフォルトで使用されます。 の
スクリプトコマンド「OUTPUT」でも出力ファイル名を指定できます。
-O レベル
If レベル ゼロより大きい数値です ld を最適化します
出力。 これにはかなり時間がかかる場合があるため、
おそらく、最終的なバイナリに対してのみ有効にする必要があります。 で
現在、このオプションは ELF 共有ライブラリの生成にのみ影響します。
リンカーの将来のリリースでは、このオプションがさらに利用される可能性があります。
また、現在のところ、リンカーの動作に違いはありません
このオプションのゼロ以外の異なる値。 これまた変わるかも
今後のリリースで。
-プッシュ状態
当学校区の -プッシュ状態 フラグの現在の状態を保持することができます
入力ファイルの処理を管理するため、すべてを
対応するXNUMXつで復元 --ポップ状態 オプションを選択します。
対象となるオプションは次のとおりです。 -バダイナミック, -Bスタティック, -dn, -dy,
-call_shared, -非共有, -静的, -N, -n, -- 全体アーカイブ,
--アーカイブなし, -r, -あなたは, --copy-dt-needed-entries,
--no-copy-dt-needed-entries, - 必要に応じて, -必要に応じて, -a.
このオプションのXNUMXつのターゲットは、 パッケージ構成。 時
で使用される --libs オプションで必要となる可能性のあるライブラリはすべて
リストされ、おそらく常にリンクされています。 する方が良い
次のように何かを返します。
-Wl、-push-state、-必要に応じて-libone -libtwo -Wl、-pop-state
--push-state の効果を元に戻し、以前の値を復元します
入力ファイルの処理を管理するフラグ。
-q
--emit-relocs
完全にリンクされた実行可能ファイルに再配置セクションとコンテンツを残します。
リンク後の分析および最適化ツールがこの情報を必要とする場合があります
実行可能ファイルの正しい変更を実行するため。 これ
実行可能ファイルが大きくなります。
このオプションは現在、ELFプラットフォームでのみサポートされています。
--力動的
出力ファイルに動的セクションを強制します。 このオプションは
VxWorks ターゲットに固有です。
-r
-再配置可能
再配置可能な出力を生成します。つまり、再配置可能な出力ファイルを生成します。
次に、への入力として機能することができます ld。 これはよく呼ばれます 部分的な
連結. 副作用として、標準をサポートする環境では
Unix マジック ナンバー。このオプションは、出力ファイルのマジックも設定します。
「OMAGIC」に番号を付けます。 このオプションが指定されていない場合、絶対
ファイルが生成されます。 C++ プログラムをリンクする場合、このオプションは 意志
コンストラクターへの参照を解決します。 それを行うには、使用します -あなたは.
入力ファイルが出力と同じ形式でない場合
ファイル、部分的なリンクは、その入力ファイルがサポートされていない場合にのみサポートされます
再配置を含む。 異なる出力形式は、さらに
制限; たとえば、一部の「a.out」ベースの形式はサポートされていません
他の形式の入力ファイルとの部分的なリンクはまったくありません。
このオプションはと同じことをします -i.
-R ファイル名
--just-symbols =ファイル名
からシンボル名とそのアドレスを読み取る ファイル名、しかししないでください
再配置するか、出力に含めます。 これにより、出力が可能になります
定義されたメモリの絶対位置をシンボリックに参照するファイル
他のプログラムで。 このオプションは複数回使用できます。
他のELFリンカーとの互換性のために、 -R オプションがある
ファイル名ではなくディレクトリ名が続く場合、
として扱われる -rpath オプションを選択します。
-s
--strip-all
出力ファイルからすべてのシンボル情報を省略します。
-S
--strip-debug
デバッガーのシンボル情報を省略します (すべてのシンボルではありません)。
出力ファイル。
-t
- 痕跡
入力ファイルの名前を次のように出力します ld それらを処理します。
-T スクリプトファイル
--script =スクリプトファイル
スクリプトファイル リンカースクリプトとして。 このスクリプトは ld's
デフォルトのリンカ スクリプト (追加するのではなく) であるため、 コマンドファイル
出力ファイルを記述するために必要なすべてを指定する必要があります。
If スクリプトファイル 現在のディレクトリに存在しない場合、「ld」は次のように見えます
前述のいずれかで指定されたディレクトリにある -L オプション。
複数 -T オプションが蓄積されます。
-dT スクリプトファイル
--default-script =スクリプトファイル
スクリプトファイル デフォルトのリンカースクリプトとして。
このオプションは、 - 脚本 それ以外のオプション
スクリプトの処理は、残りの処理が完了するまで延期されます。
コマンドラインが処理されました。 これにより、後に配置されたオプションが許可されます
-デフォルト-スクリプト に影響を与えるコマンドラインのオプション
リンカー スクリプトの動作。
リンカー コマンド ラインは、ユーザーが直接制御することはできません。 (例えば
コマンドラインが別のツールによって構築されているため、
as gccの).
-u シンボル
--undefined =シンボル
強 シンボル 未定義として出力ファイルに入力される
シンボル。 これを行うと、たとえば、追加のリンクがトリガーされる場合があります
標準ライブラリのモジュール。 -u 異なるもので繰り返すことができます
オプション引数を使用して、追加の未定義シンボルを入力します。 これ
オプションは、「EXTERN」リンカスクリプトコマンドと同等です。
このオプションを使用して、追加のモジュールを強制的に使用する場合
リンクに引き込まれ、それがシンボルのエラーである場合
未定義のままの場合、オプション --必須定義 使用すべきです
を代わりにお使いください。
--require-defined =シンボル
ことを要求 シンボル 出力ファイルで定義されます。 このオプションは
オプションと同じ - 未定義 ただし、 シンボル 定義されていません
出力ファイルで、リンカーはエラーを発行して終了します。
を使用して、リンカー スクリプトで同じ効果を実現できます。
「EXTERN」、「ASSERT」、および「DEFINED」を一緒に。 このオプションを使用できます
追加のシンボルを要求するために複数回。
-あなたは C ++プログラム以外の場合、このオプションは次のようになります。
-r: 再配置可能な出力を生成します。つまり、再配置可能な出力ファイルです。
次に、への入力として機能します ld. C++ プログラムをリンクする場合、 -あなたは ありません
コンストラクターへの参照を解決します。 -r. 効かない
つかいます -あなたは それ自体がリンクされていたファイル -あなたは; 一度
コンストラクタテーブルが作成されているため、追加できません。 使用する -あなたは
最後の部分リンクのみ、および -r 他の人のために。
--orphan-handling =モード
孤立セクションの処理方法を制御します。 孤立したセクションは XNUMX つです
リンカースクリプトでは特に言及されていません。
モード 次の値のいずれかを持つことができます。
"場所"
孤立したセクションは適切な出力セクションに配置されます
で説明されている戦略に従う 孤児 セクションを選択します。
オプション - 個性的 セクションの配置方法にも影響します。
"破棄"
孤立したセクションはすべて、
/破棄/ のセクションから無料でダウンロードできます。
"暖かい"
リンカは孤立したセクションを「場所」として配置し、
警告も出します。
"エラー"
孤立セクションがある場合、リンカはエラーで終了します。
発見した。
デフォルトの場合 -孤児の取り扱い 与えられていないのは「場所」です。
-ユニーク[=セクション]
一致する入力セクションごとに個別の出力セクションを作成します
セクション、またはオプションのワイルドカードの場合 セクション 引数がありません。
すべての孤立した入力セクションに対して。 孤立セクションは、
特にリンカースクリプトで言及されています。 このオプションを使用できます
コマンドラインで複数回。 通常のマージを防ぎます
同じ名前の入力セクションの、出力セクションのオーバーライド
リンカー スクリプトでの割り当て。
-v
- バージョン
-V のバージョン番号を表示する ldを選択します。 -V オプションもリストします
サポートされているエミュレーション。
-x
-破棄-すべて
すべてのローカルシンボルを削除します。
-X
--discard-locals
すべての一時ローカル シンボルを削除します。 (これらの記号は
通常、システム固有のローカル ラベル プレフィックス .L ELF システム用
or L 従来のa.outシステムの場合。)
-y シンボル
--trace-symbol =シンボル
リンクされた各ファイルの名前を出力します シンボル が表示されます。 これ
オプションは何度でも指定できます。 多くのシステムでは、
アンダースコアを前に付ける必要があります。
このオプションは、未定義のシンボルがある場合に役立ちます。
リンクしますが、参照がどこから来ているのかわかりません。
-Y path
追加 path デフォルトのライブラリ検索パスに。 このオプションは存在します
Solaris との互換性のため。
-z キーワード
認識されるキーワードは次のとおりです。
コムレロック
複数の再配置セクションを結合し、それらを並べ替えて動的にします
シンボル ルックアップ キャッシングが可能です。
定義
オブジェクト ファイルで未定義のシンボルを禁止します。 未定義シンボル
共有ライブラリでは引き続き許可されます。
実行スタック
オブジェクトを実行可能スタックが必要であることを示します。
全体的な
このオプションは、共有オブジェクトを構築する場合にのみ意味があります。
この共有オブジェクトによって定義されたシンボルを使用可能にします
その後ロードされたライブラリのシンボル解決用。
初期化
このオプションは、共有オブジェクトを構築する場合にのみ意味があります。
実行時の初期化が行われるようにオブジェクトをマークします。
他のオブジェクトのランタイム初期化の前に発生する
同時にプロセスに導入されました。 同様に、
オブジェクトのランタイム ファイナライズは、ランタイムの後に発生します。
他のオブジェクトのファイナライズ。
介入する
シンボル テーブルがすべての前に挿入されるオブジェクトをマークします。
シンボルですが、プライマリ実行可能ファイルです。
怠惰な
実行可能ライブラリまたは共有ライブラリを生成するときは、それを
関数呼び出しの解決を延期するよう動的リンカーに指示する
関数が呼び出されるポイント (遅延バインディング) ではなく、
ロード時よりも。 デフォルトは遅延バインディングです。
ロードフィルター
フィルタがすぐに処理されるオブジェクトをマークします
ランタイム。
muldef
複数の定義を許可します。
ノコンブレロク
複数の再配置セクションの結合を無効にします。
nocopyreloc
代わりに使用されるリンカ生成の .dynbss 変数を無効にします
共有ライブラリで定義された変数。 動的になる可能性があります
テキストの再配置。
ノードデフォルトライブラリ
この依存関係を検索するオブジェクトをマークします
オブジェクトは、デフォルトのライブラリ検索パスを無視します。
ノードレット
オブジェクトを実行時にアンロードしてはならないことを示します。
ノドロペン
オブジェクトを「dlopen」で使用できないようにマークします。
ノーダンプ
オブジェクトを「dldump」でダンプできないことを示します。
noexecstack
オブジェクトを実行可能スタックを必要としないものとしてマークします。
클라우드 기반 AI/ML및 고성능 컴퓨팅을 통한 디지털 트윈의 기초 – Edward Hsu, Rescale CPO 많은 엔지니어링 중심 기업에게 클라우드는 R&D디지털 전환의 첫 단계일 뿐입니다. 클라우드 자원을 활용해 엔지니어링 팀의 제약을 해결하는 단계를 넘어, 시뮬레이션 운영을 통합하고 최적화하며, 궁극적으로는 모델 기반의 협업과 의사 결정을 지원하여 신제품을 결정할 때 데이터 기반 엔지니어링을 적용하고자 합니다. Rescale은 이러한 혁신을 돕기 위해 컴퓨팅 추천 엔진, 통합 데이터 패브릭, 메타데이터 관리 등을 개발하고 있습니다. 이번 자리를 빌려 비즈니스 경쟁력 제고를 위한 디지털 트윈 및 디지털 스레드 전략 개발 방법에 대한 인사이트를 나누고자 합니다.
共有オブジェクトのDT_TEXTRELをエラーとして扱います。
注意事項
共有オブジェクトのDT_TEXTRELをエラーとして扱わないでください。
テキストオフ
共有オブジェクトのDT_TEXTRELをエラーとして扱わないでください。
ノレルロ
ELF「PT_GNU_RELRO」セグメントヘッダーを作成しないでください
オブジェクト。
今 実行可能ライブラリまたは共有ライブラリを生成するときは、それを
プログラムが
が開始されたとき、または共有ライブラリが使用してリンクされたとき
関数呼び出しの解決を
関数が最初に呼び出されるポイント。
起源
オブジェクトに$ ORIGINが含まれている可能性があることを示します。
リロ
オブジェクトにELF「PT_GNU_RELRO」セグメントヘッダーを作成します。
max-page-size =値
エミュレーションの最大ページサイズをに設定します 値.
common-page-size =値
エミュレーションの共通ページサイズをに設定します 値.
stack-size =値
ELF "PT_GNU_STACK" セグメントでスタック サイズを指定します。
ゼロを指定すると、ゼロ以外のデフォルトのサイズが上書きされます
「PT_GNU_STACK」セグメントの作成。
bndplt
PLT エントリで常に BND プレフィックスを生成します。 サポート対象
Linux/x86_64。
noextern-protected-data
ビルド時に保護されたデータ シンボルを外部として扱わない
共有ライブラリ。 このオプションは、リンカー バックエンドのデフォルトをオーバーライドします。
不適切な再配置を回避するために使用できます
コンパイラによって生成された保護されたデータ シンボル。 の更新
別のモジュールによって保護されたデータ シンボルは、
結果の共有ライブラリ。 i386 および x86-64 でサポートされています。
call-nop = prefix-addr
call-nop = prefix-nop
call-nop = suffix-nop
call-nop = prefix-バイト
call-nop = Supplements-バイト
間接変換時の「NOP」パディングを1バイト指定する
GOT スロットを介して、ローカルに定義された関数 foo を呼び出します。
call-nop = prefix-addr 「0x67callfoo」を生成します。
call-nop = prefix-nop 「0x90callfoo」を生成します。
call-nop = suffix-nop 「callfoo0x90」を生成します。
call-nop = prefix-バイト を生成しますバイト コール foo」.
call-nop = Supplements-バイト 「callfoo」を生成します バイト". サポート対象
i386 と x86_64。
Solarisとの互換性のため、他のキーワードは無視されます。
-( アーカイブ -)
--開始グループ アーカイブ --エンドグループ
当学校区の アーカイブ アーカイブ ファイルのリストである必要があります。 彼らはどちらかかもしれません
明示的なファイル名、または -l オプション。
指定されたアーカイブは、新しいものがなくなるまで繰り返し検索されます
未定義の参照が作成されます。 通常、アーカイブが検索されます
コマンド行で指定された順序で XNUMX 回だけ。
そのアーカイブ内のシンボルが未定義を解決するために必要な場合
後で現れるアーカイブ内のオブジェクトによって参照されるシンボル
コマンドラインでは、リンカーはそれを解決できません
参照。 アーカイブをグループ化することで、すべて検索可能
すべての可能な参照が解決されるまで繰り返します。
このオプションを使用すると、パフォーマンスが大幅に低下します。 最高です
避けられない循環参照がある場合にのみ使用する
XNUMX つ以上のアーカイブ間。
--accept-unknown-input-arch
--no-accept-unknown-input-arch
アーキテクチャーが受け入れられない入力ファイルを受け入れるようにリンカーに指示します。
認識された。 前提は、ユーザーが自分が何であるかを知っているということです
これらの不明な入力ファイルを故意にリンクしたいと考えています。
これは、リリース 2.14 より前のリンカーのデフォルトの動作でした。
リリース 2.14 以降のデフォルトの動作は、そのようなものを拒否することです。
入力ファイルなど --accept-unknown-input-arch オプションはされています
古い動作を復元するために追加されました。
- 必要に応じて
-必要に応じて
このオプションは、動的ライブラリの ELF DT_NEEDED タグに影響します
の後にコマンドラインで言及 - 必要に応じて オプションを選択します。
通常、リンカーは各ダイナミックに DT_NEEDED タグを追加します
ライブラリがコマンド ラインで指定されているかどうかに関係なく、
ライブラリが実際に必要かどうか。 - 必要に応じて DT_NEEDED を引き起こします
ライブラリに対してのみ発行されるタグ at それ ポイント in
レギュラーからの弱い未定義のシンボル参照を満たします
オブジェクト ファイル、またはライブラリが DT_NEEDED リストに見つからない場合
他の必要なライブラリの、弱くない未定義のシンボル参照
別の必要な動的ライブラリから。 オブジェクトファイルまたはライブラリ
コマンドラインに現れる After 問題のライブラリはそうではありません
ライブラリが必要に応じて表示されるかどうかに影響します。 これは似ています
アーカイブからオブジェクト ファイルを抽出するための規則。
-必要に応じて デフォルトの動作を復元します。
-追加-必要
--追加不要
これら XNUMX つのオプションは、類似性があるため廃止されました。
彼らの名前を - 必要に応じて -必要に応じて オプション。 彼ら
に置き換えられました --copy-dt-needed-entries
--no-copy-dt-needed-entries.
-主張する キーワード
このオプションは、SunOSとの互換性のために無視されます。
-バダイナミック
-dy
-call_shared
動的ライブラリにリンクします。 これは、
共有ライブラリがサポートされているプラットフォーム。 このオプションは
通常、そのようなプラットフォームではデフォルトです。 のさまざまなバリアント
このオプションは、さまざまなシステムとの互換性のためのものです。 してもいいです
コマンド ラインでこのオプションを複数回使用します。
ライブラリの検索 -l それに続くオプション。
-Bグループ
ダイナミックの「DT_FLAGS_1」エントリに「DF_1_GROUP」フラグを設定します。
セクション。 これにより、実行時リンカーはこのファイルでルックアップを処理します。
オブジェクトとその依存関係は、グループ内でのみ実行されます。
--unresolved-symbols = report-all 暗示されています。 このオプションは
共有ライブラリをサポートする ELF プラットフォームでは意味があります。
-Bスタティック
-dn
-非共有
-静的
共有ライブラリに対してリンクしないでください。 これは、
共有ライブラリがサポートされているプラットフォーム。 異なる
このオプションのバリアントは、さまざまなシステムとの互換性のためのものです。
このオプションは、コマンド ラインで複数回使用できます。
ライブラリの検索に影響を与える -l それに続くオプション。 この
オプションはまた意味します --unresolved-symbols = report-all。 このオプション
と一緒に使用できます -共有. そうすることは、共有ライブラリが
作成中ですが、ライブラリのすべての外部参照
スタティック ライブラリからエントリを取得して解決する必要があります。
-シンボリック
共有ライブラリを作成するときは、参照をグローバル シンボルにバインドします
もしあれば、共有ライブラリ内の定義に。 通常、それは
共有ライブラリに対してリンクされたプログラムは、
共有ライブラリ内の定義をオーバーライドします。 このオプションは、
と一緒に使用することもできます --エクスポート-動的 オプション、作成時
グローバルへの参照をバインドするために、独立した実行可能ファイルを配置します
シンボルを実行可能ファイル内の定義に追加します。 このオプションは
共有ライブラリをサポートする ELF プラットフォームでのみ意味があります。
独立した実行可能ファイルを配置します。
-シンボリック関数
共有ライブラリを作成するときは、参照をグローバル関数にバインドします
シンボルを共有ライブラリ内の定義に追加します (存在する場合)。 これ
オプションは、 --エクスポート-動的 オプション、とき
参照をバインドするための、位置に依存しない実行可能ファイルの作成
グローバル関数シンボルを実行可能ファイル内の定義に追加します。
このオプションは、サポートする ELF プラットフォームでのみ意味があります。
ライブラリを共有し、独立した実行可能ファイルを配置します。
--dynamic-list =動的リストファイル
動的リスト ファイルの名前をリンカに指定します。 これは
通常、共有ライブラリを作成してリストを指定するときに使用されます。
参照がバインドされてはならないグローバル シンボル
共有ライブラリ内での定義、または動的作成
リンクされた実行可能ファイルを使用して、シンボルのリストを指定します。
実行可能ファイルのシンボル テーブルに追加されます。 このオプションは
共有ライブラリをサポートする ELF プラットフォームでは意味があります。
動的リストの形式は、バージョン ノードと同じです。
スコープとノード名なし。 見る VERSION をご覧ください。
--動的リストデータ
すべてのグローバルデータシンボルを動的リストに含めます。
--dynamic-list-cpp-new
C++ 演算子の new および delete に組み込みの動的リストを提供します。
主に、共有 libstdc++ を構築するのに役立ちます。
--dynamic-list-cpp-typeinfo
C++ ランタイム型の組み込みの動的リストを提供する
識別。
-チェックセクション
--チェックセクションなし
リンカーに尋ねる セクションアドレスを確認した後
オーバーラップがあるかどうかを確認するように割り当てられています。 通常はリンカー
このチェックを実行し、オーバーラップが見つかった場合は
適切なエラー メッセージを生成します。 リンカは知っていて、
オーバーレイのセクションを考慮します。 デフォルト
コマンドラインスイッチを使用して動作を復元できます
-チェックセクション. セクションの重複は通常チェックされません
再配置可能なリンク。 その場合、次を使用して強制的にチェックできます
-チェックセクション オプションを選択します。
--copy-dt-needed-entries
--no-copy-dt-needed-entries
このオプションは、参照される動的ライブラリの処理に影響します
DT_NEEDED タグによる 内部 で言及されている ELF 動的ライブラリ
コマンドライン。 通常、リンカは DT_NEEDED タグを
DT_NEEDED タグで言及されている各ライブラリの出力バイナリ
入力動的ライブラリ。 と --copy-dt-needed-entries に指定
ただし、コマンドラインに続く動的ライブラリはすべて
DT_NEEDED エントリが追加されています。 デフォルトの動作は次のとおりです。
で復元されました --no-copy-dt-needed-entries.
このオプションは、シンボルの解像度にも影響します。
動的ライブラリ。 と --copy-dt-needed-entries 動的ライブラリ
コマンドラインで言及されたものは再帰的に検索され、
DT_NEEDED タグに従って、他のライブラリに移動します。
出力バイナリに必要なシンボルを解決します。 デフォルトで
ただし、それに続く動的ライブラリの検索
動的ライブラリ自体で停止します。 DT_NEEDED リンクはありません
シンボルを解決するためにトラバースされます。
--cref
相互参照表を出力します。 リンカー マップ ファイルが
生成されると、クロス リファレンス テーブルがマップ ファイルに出力されます。
それ以外の場合は、標準出力に出力されます。
表の形式は意図的に単純化されているため、
必要に応じてスクリプトで簡単に処理できます。 記号が印刷されています
名前順に並べ替えます。 各シンボルのファイル名のリストは次のとおりです。
与えられた。 シンボルが定義されている場合、リストされる最初のファイルは
定義の場所。 シンボルが共通として定義されている場合
値の場合、これが発生したファイルが次に表示されます。 最後に
シンボルを参照するファイルがリストされます。
--no-define-common
このオプションは、共通シンボルへのアドレスの割り当てを禁止します。
スクリプト コマンド "INHIBIT_COMMON_ALLOCATION" も同じ効果があります。
当学校区の --no-define-common オプションにより、決定を切り離すことができます
出力の選択から共通シンボルにアドレスを割り当てます
ファイルの種類; それ以外の場合、リロケータブルでない出力タイプは代入を強制します
共通記号へのアドレス。 使用する --no-define-common ことができます
共有ライブラリから参照される共通シンボル
メインプログラムでのみ割り当てられたアドレス。 これにより、
共有ライブラリ内の未使用の重複スペースを防止し、
間違った重複を解決することで混乱する可能性があります。
ランタイム用の特殊な検索パスを持つ多くの動的モジュールです
シンボル解像度。
--defsym =シンボル=表現
絶対シンボルを含む出力ファイルにグローバル シンボルを作成します。
によって与えられたアドレス 表現. このオプションは何度でも使用できます
コマンドラインで複数のシンボルを定義する必要がある場合。 あ
限定された形式の算術演算がサポートされています 表現 この内
コンテキスト: XNUMX 進数の定数または名前を指定できます。
既存の記号、または「+」と「-」を使用して XNUMX 進数を加算または減算します
定数または記号。 より凝った表現が必要な場合は、
スクリプトからリンカー コマンド言語を使用することを検討してください。 注意:
間に空白があってはなりません シンボル、等号
("=")、 と 表現.
--demangle [= ]
-デマングルなし
これらのオプションは、シンボル名を誤ってデマングルするかどうかを制御します
メッセージおよびその他の出力。 リンカがデマングルするように指示されると、
シンボル名を読みやすい形式で表示しようとします: 削除します
オブジェクト ファイル形式で使用されている場合は先頭のアンダースコア、および
C++ マングル シンボル名をユーザーが読み取り可能な名前に変換します。
コンパイラが異なれば、マングリング スタイルも異なります。 オプションの
デマングリング スタイルの引数を使用して、適切な
コンパイラのデマングリング スタイル。 リンカーはデマングルします
環境変数でない限りデフォルト COLLECT_NO_DEMANGLE 設定されています。
これらのオプションは、デフォルトをオーバーライドするために使用できます。
-Ifile
--dynamic-linker =file
動的リンカーの名前を設定します。 これは、次の場合にのみ意味があります。
動的にリンクされた ELF 実行可能ファイルを生成します。 デフォルトのダイナミック
リンカーは通常正しいです。 あなたが何を知っていない限り、これを使用しないでください
やっている。
--no-dynamic-linker
実行可能ファイルを生成するときは、動的な
ロード時に使用されるリンカー。 これはELFにとってのみ意味があります
動的再配置を含む実行可能ファイルで、通常は
これらの再配置を処理できるエントリ ポイント コード。
-致命的-警告
-致命的ではありません-警告
すべての警告をエラーとして扱います。 デフォルトの動作は次のとおりです。
オプションで復活 -致命的ではありません-警告.
--force-exe-サフィックス
出力ファイルに.exeサフィックスが付いていることを確認してください。
正常にビルドされた完全にリンクされた出力ファイルに
".exe" または ".dll" サフィックスを指定すると、このオプションはリンカーに強制的に
出力ファイルを「.exe」サフィックスが付いた同じ名前のいずれかに出力します。 これ
オプションは、変更されていない UNIX メイクファイルを使用する場合に便利です。
一部のバージョンの Windows では、Microsoft Windows ホストが実行されないため、
「.exe」サフィックスで終わらない限り、
--gc-セクション
--no-gc-sections
未使用の入力セクションのガベージ コレクションを有効にします。 無視されます
このオプションをサポートしていないターゲットでは。 デフォルトの動作
(このガベージ コレクションを実行しない) は、次の方法で復元できます。
指定する --no-gc-sections コマンドラインで。 ゴミに注意
COFF および PE 形式のターゲットのコレクションはサポートされていますが、
実装は現在実験的であると考えられています。
--gc-セクション 調べることによって、どの入力セクションが使用されるかを決定します
シンボルと再配置。 エントリ記号を含むセクション
コマンドラインで未定義のシンボルを含むすべてのセクション
によって参照されるシンボルを含むセクションと同様に、保持されます。
動的オブジェクト。 共有ライブラリを構築するときは、
リンカーは、可視シンボルが参照されていると想定する必要があります。 一度
このセクションの初期セットが決定され、リンカー
によって参照されるセクションを使用済みとして再帰的にマークします。
移転。 見る - エントリ - 未定義.
このオプションは、部分リンクを実行するときに設定できます (
オプション -r)。 この場合、保持されるシンボルのルートは
によって明示的に指定された - エントリ or - 未定義 オプションまたは
リンカー スクリプトの「ENTRY」コマンドによって。
--print-gc-sections
--no-print-gc-sections
ガベージ コレクションによって削除されたすべてのセクションを一覧表示します。 リストは
stderr に出力されます。 このオプションは、ガベージの場合にのみ有効です
コレクションは --gc-セクション) オプション。 の
デフォルトの動作 (削除されたセクションをリストしない)
を指定することで復元できます。 --no-print-gc-sections コマンドで
ライン。
--印刷出力形式
デフォルトの出力形式の名前を出力します (おそらく
他のコマンドライン オプション)。 これは表示される文字列です
「OUTPUT_FORMAT」リンカースクリプトコマンドで。
--print-メモリ使用量
作成したメモリ領域の使用サイズ、合計サイズ、使用サイズを出力
MEMORY 指図。 これは、埋め込みターゲットで役立ちます。
空きメモリの量をすばやく確認できます。 のフォーマット
出力には、地域ごとに XNUMX つの見出しと XNUMX つの行があります。 どちらも人間です
ツールで読みやすく、簡単に解析できます。 ここに例があります
出力:
使用メモリ領域サイズ領域サイズ%age使用
ROM:256 KB 1 MB 25.00%
RAM:32 B 2 GB 0.00%
- 助けて
コマンドライン オプションの概要を標準出力に出力します。
終了します。
--ターゲットヘルプ
標準のすべてのターゲット固有のオプションの概要を出力します
出力して終了します。
-マップ=マップファイル
ファイルへのリンクマップを印刷します マップファイル。 の説明を参照してください
-M 上記のオプション。
--保持メモリなし
ld 通常、キャッシュすることにより、メモリ使用量よりも速度が最適化されます
メモリ内の入力ファイルのシンボル テーブル。 このオプションは ld 〜へ
代わりに、シンボル テーブルを再読み込みして、メモリ使用量を最適化します。
必要に応じて。 これは、次の場合に必要になることがあります。 ld メモリ容量が不足しています
大きな実行可能ファイルをリンクしている間。
-いいえ-未定義
-z 定義
通常のオブジェクト ファイルから未解決のシンボル参照を報告します。
これは、リンカーが非シンボリック共有を作成している場合でも行われます
図書館。 スイッチ -[no-] allow-shlib-未定義 を制御する
共有で見つかった未解決の参照を報告するための動作
ライブラリがリンクされています。
--allow-複数定義
-z muldef
通常、シンボルが複数回定義されている場合、リンカーは
致命的なエラーを報告します。 これらのオプションにより、複数の定義と
最初の定義が使用されます。
--allow-shlib-未定義
--no-allow-shlib-未定義
共有ライブラリで未定義のシンボルを許可または禁止します。 これ
スイッチは似ています -いいえ-未定義 それが決定することを除いて
未定義のシンボルが共有ライブラリにある場合の動作
通常のオブジェクト ファイルよりも。 未定義の方法には影響しません
通常のオブジェクト ファイル内のシンボルが処理されます。
デフォルトの動作は、未定義のシンボルのエラーを報告することです
リンカーが使用されている場合、共有ライブラリで参照されます
実行可能ファイルを作成しますが、リンカーが使用されている場合は許可します
共有ライブラリを作成します。
共有で未定義のシンボル参照を許可する理由
リンク時に指定されるライブラリは次のとおりです。
· リンク時に指定された共有ライブラリは、
読み込み時に利用できるものなので、シンボルは
実際にはロード時に解決可能です。
· BeOS や HPPA など、いくつかのオペレーティング システムがあります。
共有ライブラリの未定義シンボルは正常です。
たとえば、BeOS カーネルはロード時に共有ライブラリにパッチを適用します
に最も適した機能を選択する時間
現在のアーキテクチャ。 これは、たとえば、
適切な memset 関数を動的に選択します。
--no-未定義のバージョン
通常、シンボルに未定義のバージョンがある場合、リンカーは
それを無視します。 このオプションは、バージョンが定義されていないシンボルを許可しません。
代わりに致命的なエラーが発行されます。
--デフォルト-symver
のデフォルトのシンボル バージョン (soname) を作成して使用する
バージョン管理されていないエクスポートされたシンボル。
--default-imported-symver
のデフォルトのシンボル バージョン (soname) を作成して使用する
バージョン管理されていないインポートされたシンボル。
-- 警告の不一致
通常は ld 入力をリンクしようとするとエラーが発生します
何らかの理由で不一致のファイル。
さまざまなプロセッサまたはさまざまな用にコンパイルされています
エンディアン。 このオプションは ld 静かに許可すること
このようなエラーの可能性があります。 このオプションは注意して使用してください。
あなたが何らかの特別な行動をとった場合、
リンカ エラーは不適切です。
--no-warn-検索不一致
通常は ld 互換性のないライブラリが見つかった場合、警告が表示されます
ライブラリ検索中。 このオプションは、警告を無音にします。
--アーカイブなし
の効果をオフにします -- 全体アーカイブ その後のオプション
アーカイブファイル。
--noinhibit-exec
実行可能な出力ファイルは、まだ使用できる場合は常に保持してください。
通常、リンカーは出力ファイルを生成しません。
リンク プロセス中にエラーが発生します。 書き込まずに終了します
エラーが発生したときの出力ファイル。
-nostdlib
コマンドで明示的に指定されたライブラリ ディレクトリのみを検索する
ライン。 リンカー スクリプトで指定されたライブラリ ディレクトリ (
コマンド ラインで指定されたリンカー スクリプト) は無視されます。
--oformat =出力フォーマット
ld 複数の種類のオブジェクト ファイルをサポートするように構成できます。
もしあなたの ld このように構成されている場合は、 --oformat オプション
出力オブジェクト ファイルのバイナリ形式を指定します。 ときでさえ
ld 代替オブジェクト形式をサポートするように構成されていますが、そうではありません
通常、これを指定する必要があります。 ld を生成するように構成する必要があります
デフォルトの出力フォーマットとして、各マシンで最も一般的なフォーマット。
出力フォーマット 特定の形式の名前であるテキスト文字列です
BFD ライブラリによってサポートされています。 (利用可能なバイナリを一覧表示できます
フォーマット オブジェクトダンプ -i.) スクリプト コマンド "OUTPUT_FORMAT" は、
出力形式も指定しますが、このオプションはそれをオーバーライドします。
-パイ
--pic-実行可能ファイル
位置に依存しない実行可能ファイルを作成します。 これは現在のみです
ELF プラットフォームでサポートされています。 位置に依存しない実行可能ファイルは
によって再配置されるという点で、共有ライブラリに似ています。
OS が選択した仮想アドレスへの動的リンカー
(呼び出しによって異なる場合があります)。 通常のように動的に
リンクされた実行可能ファイルは実行可能で、シンボルは
実行可能ファイルは、共有ライブラリによってオーバーライドできません。
-qmagic
Linuxとの互換性のため、このオプションは無視されます。
-Qy このオプションは、SVR4の互換性のために無視されます。
- リラックス
-リラックスしない
マシン依存の効果を持つオプション。 このオプションは
いくつかのターゲットでサポートされています。
一部のプラットフォームでは、 - リラックス オプションはターゲット固有を実行します。
リンカーが解決するときに可能になるグローバル最適化
アドレスモードの緩和など、プログラムでのアドレッシング、
新しい命令を合成し、現在の短いバージョンを選択する
命令、および定数値の組み合わせ。
一部のプラットフォームでは、これらのリンク時のグローバル最適化により、
結果の実行可能ファイルのシンボリック デバッグは不可能です。 これは
松下 MN10200 および MN10300 ファミリの場合であることが知られています。
プロセッサーの。
これがサポートされていないプラットフォームでは、 - リラックス 受け入れられますが、
無視されます。
プラットフォームで - リラックス オプションが受け入れられます -リラックスしない することができます
機能を無効にするために使用されます。
--retain-symbols-file =ファイル名
保持する の ファイルにリストされている記号 ファイル名、すべて破棄
その他。 ファイル名 は、XNUMX つにつき XNUMX つのシンボル名を持つ単純なフラット ファイルです。
ライン。 このオプションは、環境 (
大規模なグローバル シンボル テーブルが蓄積されている VxWorks)
実行時のメモリを節約するために、徐々に。
--シンボルファイルを保持 ありません 未定義のシンボルを破棄する、または
移転に必要なシンボル。
指定のみ可能 --シンボルファイルを保持 コマンドで一度
ライン。 上書きします -s -S.
-rpath =DIR
ランタイム ライブラリの検索パスにディレクトリを追加します。 これが使われています
ELF 実行可能ファイルを共有オブジェクトにリンクするとき。 全て -rpath
引数は連結され、実行時リンカーに渡されます。
それらを使用して、実行時に共有オブジェクトを見つけます。 の -rpath オプション
によって必要とされる共有オブジェクトを見つけるときにも使用されます。
リンクに明示的に含まれる共有オブジェクト。 説明を見る
-rpath-リンク オプション。 場合 -rpath をリンクするときには使用されません。
ELF 実行可能ファイル、環境変数の内容
「LD_RUN_PATH」が定義されている場合はそれが使用されます。
当学校区の -rpath オプションは、SunOS でも使用できます。 デフォルトでは、SunOS では、
リンカーは、すべての検索パスからランタイム検索パスを形成します。 -L
与えられたオプション。 もし -rpath オプションが使用され、ランタイム
検索パスは、排他的に使用して形成されます -rpath オプションは、
無視して -L オプション。 これは、gcc を使用する場合に便利です。
多くを追加 -L NFSマウントされたファイルシステムにある可能性のあるオプション。
他のELFリンカーとの互換性のために、 -R オプションがある
ファイル名ではなくディレクトリ名が続く場合、
として扱われる -rpath オプションを選択します。
-rpath-link =DIR
ELF または SunOS を使用する場合、XNUMX つの共有ライブラリが別の共有ライブラリを必要とする場合があります。
これは、「ld -shared」リンクに共有ライブラリが含まれている場合に発生します。
入力ファイルの XNUMX つ。
リンカが非実行時にそのような依存関係に遭遇したとき
共有された再配置不可能なリンク、自動的に検索しようとします
必要な共有ライブラリが含まれている場合は、リンクに含めます。
明示的に含まれていません。 このような場合、 -rpath-リンク オプション
検索するディレクトリの最初のセットを指定します。 NS -rpath-リンク
オプションは、次のいずれかの方法でディレクトリ名のシーケンスを指定できます。
コロンで区切られた名前のリストを指定するか、表示されます
複数回。
このオプションは検索を上書きするため、注意して使用する必要があります
共有ライブラリにハード コンパイルされた可能性のあるパス。 の
そのような場合、意図せずに異なるものを使用する可能性があります
実行時リンカーが行うよりも検索パス。
リンカは次の検索パスを使用して必要な場所を見つけます
共有ライブラリ:
1.によって指定されたディレクトリ -rpath-リンク オプション。
2.によって指定されたディレクトリ -rpath オプション。 違い
の間に -rpath -rpath-リンク によって指定されたディレクトリです
-rpath オプションは実行可能ファイルに含まれ、で使用されます
ランタイム、一方、 -rpath-リンク オプションはでのみ有効です
リンクタイム。 検索中 -rpath この方法でサポートされているのは、
設定済みのネイティブ リンカーとクロス リンカー
--with-sysroot オプションを選択します。
3. ELFシステムでは、ネイティブリンカーの場合、 -rpath
-rpath-リンク オプションが使用されていない場合は、
環境変数「LD_RUN_PATH」。
4. SunOSでは、 -rpath オプションは使用されませんでした。いずれかを検索してください
を使用して指定されたディレクトリ -L オプション。
5. ネイティブ リンカーの場合は、環境のコンテンツを検索します。
変数「LD_LIBRARY_PATH」。
6. ネイティブ ELF リンカの場合、「DT_RUNPATH」または
共有ライブラリの「DT_RPATH」は共有用に検索されます
それに必要なライブラリ。 次の場合、「DT_RPATH」エントリは無視されます。
「DT_RUNPATH」エントリが存在します。
7.デフォルトのディレクトリ、通常は / lib / usr / lib.
8. ELFシステムのネイティブリンカーの場合、ファイルの場合
/etc/ld.so.conf 存在する場合、その中で見つかったディレクトリのリスト
ファイルにソフトウェアを指定する必要があります。
必要な共有ライブラリが見つからない場合、リンカーは
警告が表示され、リンクを続行します。
-共有
-共有可能
共有ライブラリを作成します。 これは現在、ELF でのみサポートされています。
XCOFF および SunOS プラットフォーム。 SunOS では、リンカーは自動的に
共有ライブラリを作成する -e オプションは使用されていません。
リンク内の未定義のシンボル。
--sort-common
--sort-common = ascending
--sort-common = descending
このオプションは ld 一般的なシンボルを整列で並べ替える
に配置するときの昇順または降順
適切な出力セクション。 考慮されるシンボルの配置は次のとおりです。
XNUMX バイト以上、XNUMX バイト、XNUMX バイト、XNUMX バイト、および XNUMX
バイト。 これは、位置合わせによるシンボル間のギャップを防ぐためです。
制約。 並べ替え順序が指定されていない場合は、降順
順序が想定されます。
--sort-section = name
このオプションは、すべてのワイルドカード セクションに「SORT_BY_NAME」を適用します
リンカー スクリプトのパターン。
--sort-section = alignment
このオプションは、すべてのワイルドカード セクションに「SORT_BY_ALIGNMENT」を適用します
リンカー スクリプトのパターン。
--split-by-file [=サイズ]
そして --再配置による分割 しかし、新しい出力セクションを作成します
各入力ファイルの場合 サイズ が達成された。 サイズ デフォルトのサイズは 1
与えられていない場合。
--split-by-reloc [=カウント]
出力ファイルに余分なセクションを作成しようとします。
ファイル内の単一の出力セクションに複数の内容が含まれています カウント
移転。 これは、巨大なリロケータブル ファイルを生成する場合に便利です。
COFF オブジェクトを使用して特定のリアルタイム カーネルにダウンロードするため
ファイル形式; COFF は 65535 を超える値を表すことができないため
XNUMX つのセクションでの移転。 これは機能しないことに注意してください
任意のセクションをサポートしないオブジェクト ファイル形式で。
リンカーは、個々の入力セクションを分割しません。
したがって、単一の入力セクションに複数のセクションが含まれる場合
カウント 再配置 XNUMX つの出力セクションにその数が含まれます
移転。 カウント デフォルト値は 32768 です。
-統計
リンカーの動作に関する統計を計算して表示します。
実行時間やメモリ使用量など。
--sysroot =ディレクトリにジョブを開始します。
ディレクトリにジョブを開始します。 sysroot の場所として、
構成時のデフォルト。 このオプションはリンカーでのみサポートされています
を使用して構成された --with-sysroot.
-従来の形式
一部のターゲットでは、 ld とはいくつかの点で異なります。
既存のリンカーの出力。 このスイッチ要求 ld 使用する
代わりに従来のフォーマット。
たとえば、SunOSでは、 ld シンボル内の重複するエントリを結合します
文字列テーブル。 これにより、出力ファイルのサイズを完全に縮小できます。
デバッグ情報が 30% 以上減少しました。 残念ながら、SunOS
「dbx」プログラムは結果のプログラムを読み取ることができません (「gdb」には
問題)。 の -従来の形式 スイッチは教えます ld 結合しない
重複するエントリ。
--section-start =セクション名=ORG
指定された絶対アドレスで出力ファイル内のセクションを見つけます
by ORG. このオプションは、必要に応じて何度でも使用できます。
コマンドラインで複数のセクションを見つけます。 ORG 単一である必要があります
XNUMX 進数の整数。 他のリンカーとの互換性のために、
先頭を省略 0x 通常、XNUMX進値に関連付けられます。
注意: 間に空白があってはなりません セクション名
等号( "=")、 と ORG.
-Tbss =ORG
-Tdata =ORG
-Ttext =ORG
と同じ --セクション開始、「。bss」、「。data」、または「.text」を
セクション名.
-Ttext-segment =ORG
ELF 実行可能ファイルを作成すると、
テキストセグメントの最初のバイト。
-Trodata-segment =ORG
ターゲット用の ELF 実行可能オブジェクトまたは共有オブジェクトを作成する場合、
読み取り専用データは、
実行可能テキストの最初のバイトのアドレスを設定します
読み取り専用データ セグメント。
-Tldata-segment =ORG
x86-64 メディア用の ELF 実行可能ファイルまたは共有オブジェクトを作成する場合
メモリ モデルの最初のバイトのアドレスを設定します。
ldata セグメント。
--unresolved-symbols =方法
未解決のシンボルの処理方法を決定します。 四つあります
可能な値 方法:
全無視
未解決のシンボルは報告しないでください。
レポート-すべて
未解決のシンボルをすべて報告します。 これがデフォルトです。
オブジェクトファイルを無視する
共有に含まれる未解決のシンボルを報告する
ただし、それらが通常のオブジェクトからのものである場合は無視します
ファイル。
共有ライブラリを無視する
通常のオブジェクト ファイルからの未解決のシンボルを報告します。
ただし、共有ライブラリからのものである場合は無視してください。 これは
動的バイナリを作成するときに役立ちます。
参照する必要があるすべての共有ライブラリは
リンカーのコマンドラインに含まれています。
共有ライブラリ自体の動作も
によって制御されます -[no-] allow-shlib-未定義 オプションを選択します。
通常、リンカはそれぞれに対してエラー メッセージを生成します。
未解決のシンボルが報告されましたが、オプション -警告-未解決-記号
これを警告に変更できます。
--dll-冗長
--verbose [=数]
のバージョン番号を表示する ld リンカーエミュレーションをリストします
サポートされています。 オープンできる入力ファイルとオープンできない入力ファイルを表示します。
リンカーが使用しているリンカー スクリプトを表示します。 オプションの場合
数 引数 > 1 の場合、プラグイン シンボルのステータスも表示されます。
--version-script =バージョン-スクリプトファイル
バージョン スクリプトの名前をリンカに指定します。 これは
通常、共有ライブラリを作成して追加を指定するときに使用されます
ライブラリのバージョン階層に関する情報
作成した。 このオプションは、ELF プラットフォームでのみ完全にサポートされています
共有ライブラリをサポートするもの; 見る VERSION. 部分的です
バージョン スクリプトを使用してフィルタリングできる PE プラットフォームでサポートされています。
自動エクスポート モードでのシンボルの可視性: マークされたすべてのシンボル ローカル in
バージョン スクリプトはエクスポートされません。
-警告-共通
共通のシンボルが別の共通のシンボルと組み合わされた場合に警告するか、
シンボル定義付き。 Unix リンカは、これをいくらかずさんなものにします
練習しますが、他の一部のオペレーティング システムのリンカーはそうではありません。 これ
オプションを使用すると、グローバルな組み合わせから潜在的な問題を見つけることができます
シンボル。 残念ながら、一部の C ライブラリではこの方法が使用されているため、
ライブラリ内だけでなく、シンボルに関する警告が表示される場合があります。
あなたのプログラム。
XNUMX 種類のグローバル シンボルがあり、ここでは C で示されています。
例:
int型 i = 1;
の初期化されたデータセクションに入る定義。
出力ファイル。
外部 int型 i;
スペースを割り当てない未定義の参照。 そこには
変数の定義または共通シンボルのいずれかでなければなりません
どこか。
int型 i;
共通のシンボル。 共通点が (XNUMX つ以上) しかない場合
変数のシンボルは、初期化されていないデータ領域に入ります
出力ファイルの。 リンカは複数の共通シンボルをマージします
同じ変数を単一のシンボルに。 彼らがの場合
サイズが異なる場合は、最大のサイズが選択されます。 リンカーは
の定義がある場合、宣言への共通シンボル
同じ変数。
当学校区の -警告-共通 オプションは、XNUMX 種類の警告を生成できます。 各
warning は一対の行で構成されます: 最初の行はシンボルを説明します
XNUMX 番目は前の記号を表します
同名に遭遇。 XNUMX つの記号の一方または両方
共通記号になります。
1. 共通のシンボルをリファレンスに変える。
すでにシンボルの定義です。
(( ):警告: `の共通'
定義によりオーバーライド
(( ):警告:ここで定義
2. 共通のシンボルを参照に変える。
シンボルの定義が見つかりました。 これは
ただし、シンボルが
別の順序。
(( ):警告: `の定義'
共通のオーバーライド
(( ):警告:一般的なものはここにあります
3. コモン シンボルを以前の同じサイズのコモンとマージする
シンボル。
(( ):警告:複数の共通
`の'
(( ):警告:以前の共通点はここにあります
4.共通シンボルを以前のより大きな共通シンボルとマージします。
(( ):警告: `の共通'
より大きなコモンによってオーバーライドされます
(( ):警告:より大きな共通点はここにあります
5. 共通シンボルを以前のより小さい共通シンボルとマージする。
これは、記号を除いて、前のケースと同じです。
異なる順序で遭遇します。
(( ):警告: `の共通'
小さいコモンをオーバーライドする
(( ):警告:小さいコモンはここにあります
-警告-コンストラクター
グローバル コンストラクタが使用されている場合に警告します。 これは、
いくつかのオブジェクト ファイル形式。 COFF や ELF などのフォーマットの場合、
リンカーは、グローバル コンストラクターの使用を検出できません。
--warn-multiple-gp
出力に複数のグローバル ポインター値が必要な場合に警告する
ファイル。 これは、特定のプロセッサでのみ意味があります。
アルファ。 具体的には、一部のプロセッサは大きな値の定数を
特別なセクション。 特殊レジスター (グローバル・ポインター) が指す
定数をロードできるように、このセクションの真ん中に
ベースレジスタ相対アドレッシングモードを介して効率的に。 以来
ベースレジスタ相対モードのオフセットは固定され、相対的に
小さい (例: 16 ビット)。これにより、定数の最大サイズが制限されます。
プール。 したがって、大規模なプログラムでは、多くの場合、
すべてをアドレス指定できるようにするための複数のグローバル ポインター値
可能な定数。 このオプションにより、警告が発行されます
このケースが発生するたびに。
-警告-XNUMX回
未定義シンボルごとに XNUMX 回ではなく、未定義シンボルごとに XNUMX 回だけ警告する
それを参照するモジュール。
--warn-section-align
次の理由で出力セクションのアドレスが変更された場合に警告します。
アライメント。 通常、アライメントは入力によって設定されます
セクション。 アドレスは明示的に変更されない場合にのみ変更されます
指定; つまり、「SECTIONS」コマンドが
セクションの開始アドレス。
--warn-shared-textrel
リンカがDT_TEXTRELを共有オブジェクトに追加した場合に警告します。
--warn-alternate-em
オブジェクトに代替ELFマシンコードがある場合に警告します。
-警告-未解決-記号
リンカーが未解決のシンボルを報告する場合 (
オプション -未解決-シンボル) 通常はエラーが発生します。
このオプションは、代わりに警告を生成します。
-エラー-未解決-シンボル
これにより、エラーを生成するリンカーのデフォルトの動作が復元されます
未解決のシンボルを報告している場合。
-- 全体アーカイブ
コマンドラインの後に記載されているアーカイブごとに
-- 全体アーカイブ オプションで、アーカイブ内のすべてのオブジェクト ファイルを
必要なオブジェクトのアーカイブを検索するのではなく、リンク
ファイル。 これは通常、アーカイブ ファイルを共有ファイルに変換するために使用されます。
ライブラリ、すべてのオブジェクトが結果に含まれることを強制します
共有ライブラリ。 このオプションは複数回使用できます。
gcc からこのオプションを使用する場合の XNUMX つの注意事項: まず、gcc は認識しません。
このオプションについては、使用する必要があります -Wl、-アーカイブ全体。 次に、
忘れずに使用してください -Wl、-no-whole-archive あなたのリストの後に
gcc はアーカイブの独自のリストを
このフラグがそれらにも影響を与えたくない場合があります。
--wrap =シンボル
ラッパー関数を使用する シンボル。 未定義の参照
シンボル 「__wrap_」に解決されますシンボル". 未定義
「__real_への参照シンボル" に解決されます シンボル.
これは、システム関数のラッパーを提供するために使用できます。 の
ラッパー関数は「__wrap_」と呼ぶ必要がありますシンボル". それが望むなら
システム関数を呼び出します。「__real_」を呼び出す必要がありますシンボル".
簡単な例を次に示します。
無効*
__wrap_malloc(size_t c)
{
printf( "mallocが%zu \ nで呼び出されました"、c);
return __real_malloc(c);
}
を使用して他のコードをこのファイルにリンクする場合 - 包む malloc関数、それからすべて
「malloc」を呼び出すと、代わりに関数「__wrap_malloc」が呼び出されます。
「__wrap_malloc」で「__real_malloc」を呼び出すと、実数が呼び出されます。
「malloc」関数。
「__real_malloc」関数も提供したい場合があります。
なしのリンク - 包む オプションは成功します。 これを行うと、
「__real_malloc」の定義を同じファイルに入れるべきではありません
「__wrap_malloc」として; その場合、アセンブラは呼び出しを解決する可能性があります
リンカーがそれを「malloc」にラップする前に。
--ええ-フレーム-hdr
「.eh_frame_hdr」セクションとELFの作成依頼
「PT_GNU_EH_FRAME」セグメントヘッダー。
--no-ld-generated-unwind-info
リンカーが生成した ".eh_frame" アンワインド情報の作成を要求する
PLT のようなコード セクション。 リンカーの場合、このオプションはデフォルトでオンになっています
生成されたアンワインド情報がサポートされています。
--enable-new-dtags
--新しい dtags を無効にする
このリンカーは、ELF で新しい動的タグを作成できます。 でも年上の方は
ELF システムはそれらを理解できないかもしれません。 指定すれば
--enable-new-dtags、必要に応じて新しい動的タグが作成されます
古い動的タグは省略されます。 指定すれば
--新しい dtags を無効にする、新しいダイナミック タグは作成されません。 に
デフォルトでは、新しい動的タグは作成されません。 それらに注意してください
オプションは ELF システムでのみ使用できます。
--hash-size =数
リンカのハッシュ テーブルのデフォルト サイズを素数に設定する
近くに 数. この値を大きくすると、
リンカがタスクを実行するのにかかる時間。
リンカのメモリ要件を増やします。 同様に削減
この値は、以下を犠牲にしてメモリ要件を減らすことができます。
速度。
--hash-style =
リンカのハッシュテーブルのタイプを設定します。 「sysv」のいずれかです
従来の ELF の場合は「.hash」セクション、新しいスタイルの GNU の場合は「gnu」
「.gnu.hash」セクション、または従来の ELF「.hash」と「両方」の「両方」
新しいスタイルの GNU ".gnu.hash" ハッシュ テーブル。 デフォルトは「sysv」です。
--compress-debug-sections = none
--compress-debug-sections = zlib
--compress-debug-sections = zlib-gnu
--compress-debug-sections = zlib-gabi
ELF プラットフォームでは、これらのオプションは、DWARF がセクションをデバッグする方法を制御します。
zlib を使用して圧縮されています。 --compress-debug-sections = none しない
DWARF デバッグ セクションを圧縮します。 --compress-debug-sections = zlib-gnu
DWARF デバッグ セクションを圧縮し、デバッグ セクション名を
で始まる .zdebug 。デバッグ.
--compress-debug-sections = zlib
--compress-debug-sections = zlib-gabi DWARF デバッグ セクションを圧縮する
ELF ABI の SHF_COMPRESSED を使用します。 デフォルトの動作は異なります
関連するターゲットと使用される構成オプションに応じて
ツールチェーンを構築します。 デフォルトは、調べることによって決定できます
リンカーからの出力 - 助けて オプションを選択します。
--メモリのオーバーヘッドを減らす
このオプションは、ld 実行時のメモリー要件を軽減します。
リンク速度の犠牲。 これは古いものを選択するために導入されました
新しいリンク マップ ファイルではなく、O(n^2) アルゴリズムによるリンク マップ ファイル生成
シンボルの保存に約 40% 多くのメモリを使用する O(n) アルゴリズム。
スイッチのもう XNUMX つの効果は、デフォルトのハッシュ テーブル サイズを設定することです。
1021 に変更します。これにより、メモリが節約されますが、
リンカーの実行時間。 ただし、これは行われません。 -ハッシュサイズ
スイッチが使用されています。
当学校区の --メモリのオーバーヘッドを減らす スイッチを使用して有効にすることもできます
リンカーの将来のバージョンでのその他のトレードオフ。
--ビルド ID
--build-id =
「.note.gnu.build-id」ELF ノート セクションの作成をリクエストするか、
「.buildid」COFF セクション。 メモの内容が独特
このリンクされたファイルを識別するビット。 128を使用するために「uuid」にすることができます
ランダムなビット、「sha1」は標準で 160 ビットの SHA1 ハッシュを使用します
出力コンテンツの一部、「md5」で 128 ビット MD5 ハッシュを使用
出力内容の規範的な部分、または「0xhexstring」 使用する
XNUMX 進数の偶数として指定された選択されたビット文字列
数字 (数字ペア間の「-」および「:」文字は無視されます)。
If 省略した場合は「sha1」を使用します。
「md5」および「sha1」スタイルは、常に
同一の出力ファイルでは同じですが、すべての中で一意になります
同一でない出力ファイル。 として比較することを意図したものではありません。
ファイルの内容のチェックサム。 リンクされたファイルが変更される可能性があります
後で他のツールによって、ビルド ID ビット文字列を識別します。
元のリンク ファイルは変更されません。
「なし」を渡す 「--build-id」からの設定を無効にします
コマンドラインの前のオプション。
i386PEリンカーは -共有 出力を引き起こすオプション
通常の代わりに動的にリンクされたライブラリ (DLL) になる
実行可能。 これを使用するときは、出力に「*.dll」という名前を付ける必要があります
オプション。 さらに、リンカーは標準の「*.def」を完全にサポートしています。
ファイルは、オブジェクトのようにリンカー コマンド ラインで指定できます。
ファイル (実際には、シンボルをエクスポートするアーカイブの前にある必要があります。
通常のオブジェクトファイルと同様に、それらがリンクされていることを確認してください)。
すべてのターゲットに共通のオプションに加えて、i386 PE リンカ
i386 に固有の追加のコマンド ライン オプションをサポートします。
PE ターゲット。 値を取るオプションは、その値から分離することができます
スペースまたは等号のいずれかによって。
--add-stdcall-alias
指定されている場合、stdcallサフィックス(@nn) としてエクスポートされます-
であり、接尾辞も取り除かれています。 [このオプションは
リンカのi386PEターゲットポート]
--ベースファイル file
file ベースアドレスを保存するファイルの名前として
でDLLを生成するために必要なすべての再配置の dllツール.
[これは i386 PE 固有のオプションです]
--dll
通常の実行可能ファイルの代わりにDLLを作成します。 使用することもできます
-共有 または、特定の「.def」ファイルで「LIBRARY」を指定します。 [この
オプションは、リンカーのi386PEターゲットポートに固有です]
--長いセクション名を有効にする
--長いセクション名を無効にする
COFF オブジェクト形式の PE バリアントは、拡張機能を追加します。
XNUMX 文字を超えるセクション名の使用を許可します。
COFF の正常限界。 デフォルトでは、これらの名前は
完全にリンクされた実行可能イメージにはオブジェクト ファイルが含まれていないため、
長い名前をサポートするために必要な COFF 文字列テーブル。 GNUとして
拡張子、実行可能イメージでの使用を許可することが可能です
同様に、または(おそらく無意味に!)オブジェクトでそれを許可しない
ファイル、これら XNUMX つのオプションを使用して。 生成された実行可能イメージ
これらの長いセクション名は少し標準的ではありません。
それらは文字列テーブルを行うため、混乱する出力を生成する可能性があります
ファイル ビューアや
ダンパー。 ただし、GDB は PE の長いセクション名の使用に依存しています。
実行可能イメージで Dwarf-2 デバッグ情報セクションを見つける
したがって、コマンドでどちらのオプションも指定されていない場合は、
ライン、 ld 長いセクション名を有効にして、デフォルトを上書きし、
デバッグの存在が検出されたときの技術的に正しい動作
実行可能イメージをリンクし、ストリップしないときの情報
シンボル。 [このオプションは、
リンカ]
--enable-stdcall-fixup
--disable-stdcall-fixup
リンクが解決できないシンボルを見つけた場合は、
別の定義されたシンボルを探すことによって「あいまいリンク」を行う
シンボル名の形式のみが異なります (cdecl と stdcall)
一致にリンクすることでそのシンボルを解決します。 例えば、
未定義のシンボル「_foo」が関数にリンクされている可能性があります
"_foo@12"、または未定義のシンボル "_bar@16" がリンクされている可能性があります。
関数 "_bar"。 リンカーがこれを行うと、警告が出力されます。
通常はリンクに失敗するはずですが、インポートすることがあります
サードパーティの dll から生成されたライブラリでは、この機能が必要になる場合があります。
使える。 指定すれば --enable-stdcall-fixup、この機能は
完全に有効になり、警告は出力されません。 指定すれば
--disable-stdcall-fixup、この機能が無効になっているなど
不一致はエラーと見なされます。 [このオプションは固有のものです
リンカのi386PEターゲットポートへ]
--先頭のアンダースコア
--先頭にアンダースコアなし
ほとんどのターゲットでは、デフォルトのシンボル プレフィックスはアンダースコアであり、
ターゲットの説明で定義されています。 このオプションにより、次のことが可能になります。
デフォルトの下線記号プレフィックスを無効/有効にします。
--すべてのシンボルをエクスポート
指定されている場合、DLL の構築に使用されるオブジェクト内のすべてのグローバル シンボル
DLL によってエクスポートされます。 これがデフォルトであることに注意してください。
そうしないと、エクスポートされたシンボルはありません。 シンボルが
DEF ファイルを介して明示的にエクスポートされるか、暗黙的にエクスポートされます。
関数属性。デフォルトでは、それ以外はエクスポートされません
このオプションが指定されていない限り。 シンボル「DllMain@12」、
"DllEntryPoint@0"、"DllMainCRTStartup@12"、および "impure_ptr" は、
自動的にエクスポートされません。 また、他のからインポートされたシンボル
DLL は再エクスポートされず、DLL を指定するシンボルも再エクスポートされません。
「_head_」で始まるものや終わるものなどの内部レイアウト
「_iname」で。 さらに、「libgcc」、「libstd++」、
「libmingw32」または「crtX.o」がエクスポートされます。 名前のシンボル
「__rtti_」または「__builtin_」で始まるものはエクスポートされません。
C++ DLL を使用します。 最後に、cygwin の広範なリストがあります。
エクスポートされないプライベート シンボル (明らかに、これは
cygwin ターゲット用の DLL をビルドする場合)。 これらの cygwin-excludes は次のとおりです。
"_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」。 【本オプション
リンカのi386PEターゲットポートに固有です]
-除外-記号 シンボル,シンボル、...
自動的に実行されるべきではないシンボルのリストを指定します
エクスポートされました。 シンボル名は、コンマまたはコロンで区切ることができます。
[このオプションは、i386 PE ターゲット ポートに固有です。
リンカ]
--すべてのシンボルを除外
シンボルを自動的にエクスポートしないことを指定します。 [この
オプションは、リンカーのi386PEターゲットポートに固有です]
--ファイル配置
ファイルのアライメントを指定します。 ファイル内のセクションは常に始まります
この数値の倍数のファイル オフセットで。 これがデフォルトです
[このオプションは、i512 PE ターゲット ポートに固有です。
リンカー]
- ヒープ リザーブ
- ヒープ リザーブ,コミット
予約するメモリのバイト数を指定します (オプションで
commit) をこのプログラムのヒープとして使用します。 デフォルトは 1MB です
予約、4K コミット。 [このオプションは i386 PE に固有のものです
リンカーのターゲットポート]
--画像ベース 値
値 プログラムまたは DLL のベースアドレスとして使用します。 これは
プログラムまたは DLL を実行するときに使用される最小のメモリ位置
ロードされています。 移転の必要性を減らし、パフォーマンスを向上させるため
DLL のそれぞれに固有のベース アドレスが必要です。
他の DLL をオーバーラップします。 実行可能ファイルのデフォルトは 0x400000 です。
dll の場合は 0x10000000 です。 [このオプションは i386 PE に固有のものです
リンカーのターゲットポート]
--キルアット
指定されている場合、stdcallサフィックス(@nn) はシンボルから削除されます
エクスポートされる前に。 [このオプションは i386 PE に固有のものです
リンカーのターゲットポート]
--ラージアドレス対応
指定されている場合、「特性」フィールドの適切なビット
COFF ヘッダーは、この実行可能ファイルがサポートしていることを示すように設定されています
2 ギガバイトを超える仮想アドレス。 これはで使用する必要があります
/3GB または /USERVA= との組み合わせ値 のメガバイト スイッチ
BOOT.INI の「[オペレーティング システム]」セクション。 そうでなければ、このビット
効果はありません。 [このオプションは、PE ターゲット ポートに固有です。
リンカー]
--ラージアドレス対応を無効にする
以前の効果を元に戻します --ラージアドレス対応 オプションを選択します。
これは次の場合に便利です --ラージアドレス対応 によって常に設定されます。
コンパイラ ドライバ (Cygwin gcc など) と実行可能ファイルは
2 ギガバイトを超える仮想アドレスをサポートします。 【本オプション
リンカのPEターゲットポートに固有です]
--主要なイメージ バージョン 値
「イメージ バージョン」のメジャー番号を設定します。 デフォルトは 1 です。
[このオプションは、i386 PE ターゲット ポートに固有です。
リンカ]
--メジャー OS バージョン 値
「OS バージョン」のメジャー番号を設定します。 デフォルトは 4 です。
オプションは、リンカーのi386PEターゲットポートに固有です]
--メジャー サブシステム バージョン 値
「サブシステムのバージョン」のメジャー番号を設定します。 デフォルトは 4 です。
[このオプションは、i386 PE ターゲット ポートに固有です。
リンカ]
-マイナーイメージバージョン 値
「イメージ バージョン」のマイナー番号を設定します。 デフォルトは 0 です。
[このオプションは、i386 PE ターゲット ポートに固有です。
リンカ]
-マイナー-os-バージョン 値
「OS バージョン」のマイナー番号を設定します。 デフォルトは 0 です。[この
オプションは、リンカーのi386PEターゲットポートに固有です]
-マイナーサブシステムバージョン 値
「サブシステムのバージョン」のマイナー番号を設定します。 デフォルトは 0 です。
[このオプションは、i386 PE ターゲット ポートに固有です。
リンカ]
-- 出力定義 file
リンカがファイルを作成します file DEFファイルが含まれます
リンカーが生成している DLL に対応します。 このDEFファイル
(「*.def」と呼ばれる必要があります) を使用してインポートを作成できます
ライブラリは「dlltool」を使用するか、への参照として使用できます
自動的または暗黙的にエクスポートされたシンボル。 【こちらのオプションは
リンカのi386PEターゲットポートに固有]
--out-implib file
リンカがファイルを作成します file インポートが含まれます
リンカが生成している DLL に対応する lib. このインポート
lib (「*.dll.a」または「*.a」という名前にする必要があります) をリンクに使用できます。
生成された DLL に対するクライアント。 この振る舞いはそれを可能にします
別の「dlltool」インポート ライブラリの作成手順をスキップします。 [これ
オプションは、リンカーのi386PEターゲットポートに固有です]
--enable-auto-image-base
--enable-auto-image-base =値
DLL のイメージ ベースを自動的に選択し、オプションで開始します
ベース付き 値、「--image-base」を使用して指定されていない限り
口論。 dllname から生成されたハッシュを使用して作成する
各 DLL の一意のイメージ ベース、メモリ内衝突、および
プログラムの実行を遅らせる可能性のある再配置は回避されます。 [この
オプションは、リンカーのi386PEターゲットポートに固有です]
--自動イメージベースを無効にする
一意のイメージ ベースを自動的に生成しません。 ない場合
ユーザー指定のイメージ ベース (「--image-base」) で、プラットフォームを使用する
デフォルト。 [このオプションは、i386 PE ターゲット ポートに固有です。
リンカー]
--dll-検索プレフィックス string
インポート ライブラリを使用せずに dll に動的にリンクする場合は、
為に " 「lib」よりも「.dll」 .dll".
この動作により、アプリケーション用にビルドされた DLL を簡単に区別できます。
さまざまな「サブプラットフォーム」: native、cygwin、uwin、pw など。
たとえば、cygwin DLL は通常、「--dll-search-prefix=cyg」を使用します。
[このオプションは、i386 PE ターゲット ポートに固有です。
リンカ]
--自動インポートを有効にする
DATA の "_symbol" から "__imp__symbol" への洗練されたリンクを行う
DLL からインポートし、必要なサンク シンボルを作成します。
これらの DATA エクスポートを使用してインポート ライブラリを構築します。 注: の使用
「auto-import」拡張子により、
書き込み可能にする画像ファイル。 これは PE に準拠していません。
Microsoft が公開している COFF 形式の仕様。
注 - 「自動インポート」拡張機能を使用すると、読み取り専用になります
通常は .rdata セクションに配置されるデータ
代わりに .data セクションに配置されます。 これは働くためです
ここで説明されている const に関する問題の周り:
http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html
「自動インポート」を使用すると、通常は「うまく機能します」-しかし、時には
次のメッセージが表示される場合があります。
"変数 ' ' は自動インポートできません。
詳細については、ld の「--enable-auto-import」のドキュメントを参照してください。
このメッセージは、一部の (サブ) 式がアドレスにアクセスするときに発生します
最終的には、32 つの定数の合計によって与えられます (WinXNUMX インポート テーブル
XNUMX つだけ許可します)。 これが発生する可能性のあるインスタンスには、アクセスが含まれます
DLL からインポートされた構造体変数のメンバー フィールドにも
からインポートされた配列変数への定数インデックスを使用するように
DLL。 マルチワード変数 (配列、構造体、long long など) は、
このエラー状態をトリガーします。 ただし、正確な値に関係なく
問題のあるエクスポートされた変数のデータ型、ld は常に検出します
警告を出して終了します。
この問題に対処する方法はいくつかあります。
エクスポートされた変数のデータ型:
XNUMX つの方法は、 --enable-runtime-pseudo-reloc スイッチを使用することです。 この葉
実行時にクライアント コード内の参照を調整するタスク
環境であるため、このメソッドはランタイム環境の場合にのみ機能します
はこの機能をサポートしています。
XNUMX 番目の解決策は、「定数」の XNUMX つを強制的に
variable -- つまり、コンパイル時に不明で最適化できません。
配列の場合、次の XNUMX つの可能性があります。
配列のアドレス) 変数、または b) 「定数」インデックスを作成する
変数。 したがって:
externタイプextern_array [];
extern_array [1]->
{揮発性タイプ* t = extern_array; t [1]}
or
externタイプextern_array [];
extern_array [1]->
{volatile int t = 1; extern_array [t]}
構造体 (および他のほとんどのマルチワード データ型) の場合、唯一のオプション
構造体自体 (または long long、または ...) を作成することです。
変数:
extern 構造体 extern_struct;
extern_struct.field->
{volatile struct s * t =&extern_struct; t->フィールド}
or
externlonglongextern_ll;
extern_ll->
{volatile long long * local_ll =&extern_ll; * local_ll}
この困難に対処する第 XNUMX の方法は、放棄することです。
問題のあるシンボルを「自動インポート」し、それをマークします
"__declspec(dllimport)". ただし、実際には使用する必要があります
コンパイル時の #defines は、DLL をビルドしているかどうかを示します。
DLL にリンクするクライアント コードを構築する、または単に
静的ライブラリの構築/リンク。 選択をするにあたって
「との直接アドレスを解決するさまざまな方法の間
定数オフセットの問題、典型的な実世界を考慮する必要があります
使用法:
オリジナル:
--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){
/ *この回避策はwin32とcygwin用です。 「最適化」しないでください* /
volatile int * parr = arr;
printf( "%d \ n"、parr [1]);
}
ソリューション2:
--foo.h
/ *注:自動エクスポートが想定されています(__declspec(dllexport)なし)* /
#if(defined(_WIN32)|| defined(__ CYGWIN __))&& \
!(defined(FOO_BUILD_DLL)|| defined(FOO_STATIC))
#define FOO_IMPORT __declspec(dllimport)
#その他
#FOO_IMPORT を定義
#endif
extern FOO_IMPORT int arr [];
--foo.c
#include "foo.h"
void main(int argc、char ** argv){
printf( "%d \ n"、arr [1]);
}
この問題を回避する XNUMX つ目の方法は、ライブラリを次のように再コーディングすることです。
データ インターフェイスではなく機能インターフェイスを使用します。
問題のある変数 (例: set_foo() get_foo() アクセサ
機能)。 [このオプションは、i386 PE ターゲット ポートに固有のものです。
リンカーの]
--自動インポートを無効にする
「_symbol」を洗練されたリンクにしようとしないでください
DLL からの DATA インポート用の「__imp__symbol」。 【こちらのオプションは
リンカのi386PEターゲットポートに固有]
--enable-runtime-pseudo-relocを有効にする
コードに --enable-auto-import で説明されている式が含まれている場合
セクション、つまりゼロ以外のオフセットを持つ DLL からの DATA インポート、これ
switch は、「ランタイム疑似再配置」のベクトルを作成します。
ランタイム環境で使用して、そのような参照を調整できます
クライアント コードのデータ。 [このオプションは i386 PE に固有のものです
リンカーのターゲットポート]
--disable-runtime-pseudo-reloc
ゼロ以外のオフセット DATA インポートに対して疑似再配置を作成しない
DLLから。 [このオプションは、i386 PE ターゲット ポートに固有のものです。
リンカーの]
--enable-extra-pe-debug
自動インポート シンボル サンクに関連する追加のデバッグ情報を表示します。
[このオプションは、i386 PE ターゲット ポートに固有です。
リンカ]
--セクションの配置
セクションの配置を設定します。 メモリ内のセクションは常に始まります
この数値の倍数のアドレスにあります。 デフォルトは
0x1000。 [このオプションは、i386 PE ターゲット ポートに固有です。
リンカー]
- スタック リザーブ
- スタック リザーブ,コミット
予約するメモリのバイト数を指定します (オプションで
commit) をこのプログラムのスタックとして使用します。 デフォルトは 2MB です
予約、4K コミット。 [このオプションは i386 PE に固有のものです
リンカーのターゲットポート]
-サブシステム which
-サブシステム which:主要な
-サブシステム which:主要な.マイナー
プログラムが実行されるサブシステムを指定します。 の
の正当な値 which は「ネイティブ」、「ウィンドウ」、「コンソール」、「posix」、
そして「エックスボックス」。 オプションで、サブシステムのバージョンも設定できます。
には数値も使用できます。 which. 【こちらのオプションは
リンカのi386PEターゲットポートに固有]
次のオプションは、「DllCharacteristics」フィールドにフラグを設定します
PE ファイル ヘッダーの: [これらのオプションは、ターゲットとする PE に固有のものです。
リンカーのポート]
-高エントロピー-va
イメージは 64 ビット アドレス空間レイアウトのランダム化と互換性があります
(ASLR)。
--dynamicbase
イメージ ベース アドレスは、アドレス空間レイアウトを使用して再配置できます
ランダム化 (ASLR)。 この機能は、MS Windows で導入されました
i386 PE ターゲット用の Vista。
--forceinteg
コードの整合性チェックが実施されます。
--nxcompat
イメージは、データ実行防止と互換性があります。 これ
機能は、i2 PE ターゲット用の MS Windows XP SP386 で導入されました。
-分離なし
画像は分離を理解していますが、画像を分離しないでください。
--ノセヘ
イメージは SEH を使用しません。 ここから SE ハンドラを呼び出すことはできません
画像。
-バインドなし
この画像をバインドしないでください。
--wdmdriver
ドライバーはMSWindowsドライバーモデルを使用します。
-- ツァワレ
イメージはターミナルサーバーに対応しています。
-挿入-タイムスタンプ
--no-insert-タイムスタンプ
イメージに実際のタイムスタンプを挿入します。 これがデフォルトです
従来のコードと一致するため、画像が
他の独自のツールで動作します。 これの問題
デフォルトでは、わずかに異なる画像が表示されます。
同じソースがリンクされるたびに生成されます。 オプション
--no-insert-タイムスタンプ にゼロ値を挿入するために使用できます。
タイムスタンプ、これにより、バイナリが同一のものから生成されることが保証されます
ソースは同じように比較されます。
C6X uClinux ターゲットは、DSBT と呼ばれるバイナリ形式を使用してサポートします。
共有ライブラリ。 システム内の各共有ライブラリには、
一意のインデックス; すべての実行可能ファイルはインデックス 0 を使用します。
--dsbt-サイズ サイズ
このオプションは、現在の DSBT のエントリ数を設定します。
実行可能ファイルまたは共有ライブラリへ サイズ. デフォルトでは、
64 エントリのテーブル。
--dsbt-index index
このオプションは、現在の実行可能ファイルまたは共有ファイルの DSBT インデックスを設定します
ライブラリから index. デフォルトは 0 です。
実行可能ファイルの生成。 共有ライブラリが
DSBT インデックス 0、「R_C6000_DSBT_INDEX」再配置がコピーされます
出力ファイル。
当学校区の --no-merge-exidx-entries スイッチは、のマージを無効にします
フレーム巻き戻し情報の隣接する exidx エントリ。
68HC11 および 68HC12 リンカーは、特定のオプションをサポートして、
メモリ バンク切り替えマッピングとトランポリン コード生成。
-トランポリンなし
このオプションは、トランポリンの生成を無効にします。 デフォルトでは、
トランポリンは、以下を使用して呼び出される far 関数ごとに生成されます
「jsr」命令 (これは、far 関数へのポインターが
取られます)。
--銀行窓口 名
このオプションは、メモリ領域の名前をリンカに示します
会場は MEMORY メモリ バンク ウィンドウを記述する仕様。
そのような領域の定義は、リンカーによって計算に使用されます。
メモリ ウィンドウ内のページングとアドレス。
GOT の処理を制御するために、次のオプションがサポートされています。
68K ターゲットのリンク時の生成。
--got =type
このオプションは、使用するGOT生成スキームをリンカーに指示します。
type のXNUMXつである必要があります , 負, マルチゴット or ターゲット。 のために
詳細については、Info エントリを参照してください。 ld.
microMIPS 命令を制御するために、次のオプションがサポートされています。
MIPS ターゲットのリンク時の生成。
--insn32
--no-insn32
これらのオプションは、で使用される microMIPS 命令の選択を制御します。
PLT や lazy など、リンカーによって生成されたコード
スタブをバインドするか、緩和します。 もしも --insn32 が使用された後、
リンカは 32 ビットの命令エンコーディングのみを使用します。 デフォルトまたは
--no-insn32 を含むすべての命令エンコーディングが使用されます。
可能な場合は 16 ビットのもの。
ENVIRONMENT
の動作を変更できます ld 環境変数を使用して
「GNUTARGET」、「LDEMULATION」、および「COLLECT_NO_DEMANGLE」。
「GNUTARGET」は、使用しない場合の入力ファイルオブジェクトの形式を決定します -b
(またはその同義語 - フォーマット)。 その値は、BFD 名のいずれかである必要があります
入力フォーマット用。 環境に「GNUTARGET」がない場合、 ld
ターゲットの自然な形式を使用します。 「GNUTARGET」が設定されている場合
「デフォルト」の場合、BFD は入力形式を調べて検出しようとします。
バイナリ入力ファイル; この方法はしばしば成功しますが、潜在的な可能性があります
マジックナンバーを保証する方法がないため、あいまいさ
オブジェクト ファイル形式を指定するために使用されるは一意です。 しかし
各システムでの BFD の設定手順は、従来の
検索リストの最初にそのシステムのフォーマットがあるため、あいまいさはありません
条約に賛成して解決されました。
「LDEMULATION」は、を使用しない場合のデフォルトのエミュレーションを決定します -m
オプション。 エミュレーションは、リンカーの動作のさまざまな側面に影響を与える可能性があります。
特にデフォルトのリンカー スクリプト。 利用可能なリストを表示できます
とのエミュレーション -詳細 or -V オプション。 の場合 -m オプションはありません
使用され、「LDEMULATION」環境変数が定義されていない場合、
デフォルトのエミュレーションは、リンカがどのように構成されたかによって異なります。
通常、リンカはデフォルトでシンボルのデマングリングを行います。 ただし、
「COLLECT_NO_DEMANGLE」が環境に設定されている場合、デフォルトになります
シンボルを解読しないようにします。 この環境変数は、
「gcc」リンカーラッパープログラムによる同様の方法。 デフォルトは
によってオーバーライドされる -デマングル -デマングルなし オプション。
onworks.net サービスを使用して i686-linux-gnu-ld をオンラインで使用する