JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris 11.1 リンカーとライブラリガイド     Oracle Solaris 11.1 Information Library (日本語)
このドキュメントの評価
search filter icon
search icon

ドキュメントの情報

はじめに

パート I リンカーおよび実行時リンカーの使用

1.  Oracle Solaris リンカーの紹介

2.  リンカー

3.  実行時リンカー

4.  共有オブジェクト

パート II クイックリファレンス

5.  リンカーのクイックリファレンス

パート III 詳細情報

6.  直接結合

7.  システムのパフォーマンスを最適化するオブジェクトの構築

elfdump を使用したファイルの解析

基本システム

動的依存関係の遅延読み込み

位置独立のコード

-K pic-K PIC オプション

使用されない対象物の削除

未使用セクションの削除

未使用ファイルの削除

未使用の依存関係の削除

共有可能性の最大化

テキストへの読み取り専用データの移動

多重定義されたデータの短縮

自動変数の使用

バッファーの動的割り当て

ページング回数の削減

再配置

シンボルの検索

再配置が実行されるとき

再配置セクションの結合

コピー再配置

-B symbolic オプションの使用

共有オブジェクトのプロファイリング

8.  mapfile

9.  インタフェースおよびバージョン管理

10.  動的ストリングトークンによる依存関係の確立

11.  拡張性メカニズム

パート IV ELF アプリケーションバイナリインタフェース

12.  オブジェクトファイル形式

13.  プログラムの読み込みと動的リンク

14.  スレッド固有ストレージ (TLS)

パート V 付録

A.  リンカーとライブラリのアップデートおよび新機能

B.  System V Release 4 (バージョン 1) Mapfile

索引

ドキュメントの品質向上のためのご意見をください
簡潔すぎた
読みづらかった、または難し過ぎた
重要な情報が欠けていた
内容が間違っていた
翻訳版が必要
その他
Your rating has been updated
貴重なご意見を有り難うございました!

あなたの貴重なご意見はより良いドキュメント作成の手助けとなります 内容の品質向上と追加コメントのためのアンケートに参加されますか?

使用されない対象物の削除

入力再配置可能オブジェクトファイルの関数やデータが構築中のオブジェクトによって使用されない場合は、この対象物を取り込んでも無駄です。この使用されない対象物によってオブジェクトが必要以上に肥大し、実行時にそのオブジェクトを使用するときのオーバーヘッドが増加します。

使用されない共有オブジェクト依存関係への参照も無駄です。特に遅延読み込みがない場合は、これらの参照によって実行時にこれらの共有オブジェクトの不必要な読み込みと処理が生じます。

未使用のセクション、未使用の再配置可能オブジェクトファイル、および未使用の共有オブジェクト依存関係は、リンク編集時にリンカーの -D unused デバッグオプションを使用して診断できます。

未使用のファイルと依存関係は、-z guidance オプションを使用したときにも診断されます。

未使用のセクション、未使用のファイル、および未使用の依存関係は、リンク編集から削除すべきです。この削除によって、リンク編集のコストが減少し、構築中のオブジェクトを実行時に使用するコストも減少します。ただし、これらの項目の削除に問題がある場合は、-z discard-unused オプションを使用すると、未使用の対象物を構築中のオブジェクトから破棄できます。

未使用セクションの削除

入力再配置可能オブジェクトファイルに含まれる ELF セクションは、3 つの条件が真である場合に未使用と判定されます。

未使用セクションをリンク編集から破棄するには、-z discard-unused=sections オプションを使用します。

動的オブジェクトの外部インタフェースを定義することにより、未使用セクションを診断して破棄するリンカーの機能を向上させることができます。第 9 章インタフェースおよびバージョン管理を参照してください。インタフェースを定義すると、インタフェースの一部として定義されていない大域シンボルが局所に限定されます。ほかのオブジェクトから参照されない限定されたシンボルは、破棄の対象として明確に識別されます。

関数やデータ変数が独自のセクションに割り当てられている場合、リンカーはこれらの項目を個別に破棄できます。このセクション改良は、-xF コンパイラオプションを使用して実現できます。

未使用ファイルの削除

入力再配置可能オブジェクトファイルは、再配置可能オブジェクトによって提供されるすべての割り当て可能セクションが未使用である場合に、未使用と判定されます。

未使用ファイルは、-z guidance オプションで診断され、-z discard-unused=files オプションを使用してリンク編集から破棄できます。

-z discard-unused オプションは、-z guidance の処理を補完するために、未使用セクションと未使用ファイルを独立して制御します。-z guidance では、未使用と判定されるファイルが識別されます。未使用ファイルは、多くの場合、リンク編集から簡単に削除できます。しかし、未使用と判定されるセクションは -z guidance の処理では識別されません。未使用セクションは、削除するためにより多くの調査と作業が必要であり、ユーザーが制御できないコンパイラ動作の結果として生じる可能性があります。

-z guidance オプションとともに -z discard-unused=sections オプションを使用すると、未使用セクションは自動的に削除されますが、未使用ファイルはリンク編集から削除する対象として識別されます。

未使用の依存関係の削除

明示的な共有オブジェクト依存関係は、コマンド行でパス名または (より一般的には) -l オプションを使用して定義されます。明示的な依存関係には、コンパイラドライバ (-lc など) によって提供された可能性があるものも含まれます。明示的な依存関係は、2 つの条件が真である場合に未使用と判定されます。

未使用の依存関係は、-z guidance オプションで診断され、-z discard-unused=dependencies オプションを使用してリンク編集から破棄できます。

暗黙の依存関係は、明示的な依存関係の依存関係です。暗黙の依存関係は、すべてのシンボル解決の封じ込めを完成させるため、リンク編集の一部として処理できます。このシンボルの封じ込めにより、構築中のオブジェクトが自己完結型であり、未参照のシンボルが残っていないことが保証されます。

すべての動的オブジェクトは、必要な依存関係を定義すべきです。この要件は、動的実行可能ファイルを構築するときはデフォルトで適用されますが、共有オブジェクトを構築するときは -z defs オプションを使用した場合にのみ適用されます。残念ながら共有オブジェクトにそのオブジェクトが必要とする依存関係が定義されていない場合は、それらのオブジェクトのために明示的な依存関係を提供する必要がある可能性があります。このような依存関係は、補完依存関係と呼ばれます。補完依存関係は、計画的に -z defs オプションを使用してすべての動的オブジェクトを構築することで不要になります。

自身の依存関係を定義しない動的オブジェクトは修正するべきです。ただし、これらのオブジェクトが有効なプロセスを作成するために補完依存関係を必要とする場合があるため、-z discard-unused=dependencies オプションでは未使用の補完依存関係は削除されません。

-z ignore および -z record オプションは、-z discard-unused=dependencies オプションと組み合わせて使用できる定位置オプションです。これらの定位置オプションは、対象となるオブジェクトを選択して、破棄機能をオンまたはオフにします。