4

x8664およびLinuxプラットフォームを想定します。

ELFヘッダーを調べると、オフセットはすべて64ビットです。

したがって、relocatoin R_X86_64_64を使用して、4Gより大きいオブジェクトファイルを簡単に作成できます。これは、静的.oファイルと実行可能ファイルが64ビットで表現できる最大値になる可能性があることを意味します。

ただし、gccのような共有ライブラリの場合、R_X86_64_PLT32の再配置しかありません。つまり、4GBを超える共有ライブラリを作成することは不可能ですよね?

したがって、巨大なプログラムを構築したい場合、.oファイルの1つが十分に巨大(> 4GB)である場合、唯一の選択肢は静的リンクですか?

コメントは大歓迎です。

ありがとう、リミ

4

1 に答える 1

3

Linuxで使用されるx86-64ABIは、GOTおよびPLTの64ビット再配置タイプを含むこのようなサイズ制限を回避するために特に「ラージモデル」を定義します。(セクション4.4.2の表、およびそれらの使用方法を示す3.5.5の命令シーケンスを参照してください。)

于 2010-10-21T21:40:14.627 に答える