`-fpic`と` -fPIC`のgccパラメータの違いは何ですか?


96

私はすでに読んだgccmanページを、私はまだの違いを理解することはできません-fpicとします-fPIC。誰かがそれを非常にシンプルで明確な方法で説明できますか?


関連する質問:


1
はい、答えはにはありませんman gccが、info gccより多くのドキュメントがあります。
user2284570 14

回答:


109

http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

-fPICまたは-fpicを 使用して、位置に依存しないコードを生成します。位置に依存しないコードを使用する-fPIC-fpic生成するかは、ターゲットに依存します。-fPIC選択は常に動作しますが、より大きなコードを生成すること-fpic(これは、コードのより大きな量を生成することのでPICは、より大きな場合にはあるということです覚えておくことがmnenomic)。-fpic通常、オプションを使用すると、より小さくて高速なコードが生成されますが、グローバルに表示されるシンボルの数やコードのサイズなど、プラットフォームに依存する制限があります。リンカは、共有ライブラリを作成するときに、それが適合するかどうかを教えてくれます。疑問がある場合は、-fPIC常に機能するため、私はを選択します。


33
より多くの情報:私は(x86_64のプラットフォーム上で)ここで少し実験を行った、-fPIC-fpic同じコードを生成しているように見えます。m68k、PowerPC、およびSPARCでのみ異なるコードを生成するようです。
デニルソンサマイア

3
あるターゲットに対して1つの方法でコンパイルされたgccの1つのバージョンを使用した単一の実験。その結果を詳細に検討し、GCCなどのツールを使用すると、時間の経過とともにその結果が変化することを期待してください。
old_timer 2017年

質問しても良いですか; 何をんグローバル見える記号は意味ですか?
КонстантинВан

17

以下からのgccマニュアルページ

共有ライブラリのコードを生成する場合、-fpicは-msmall-dataを意味し、-fPICは-mlarge-dataを意味します。

どこ:

 -msmall-data
 -mlarge-data
       When -mexplicit-relocs is in effect, static data is accessed via
       gp-relative relocations.  When -msmall-data is used, objects 8
       bytes long or smaller are placed in a small data area (the
       ".sdata" and ".sbss" sections) and are accessed via 16-bit
       relocations off of the $gp register.  This limits the size of the
       small data area to 64KB, but allows the variables to be directly
       accessed via a single instruction.

       The default is -mlarge-data.  With this option the data area is
       limited to just below 2GB.  Programs that require more than 2GB
       of data must use "malloc" or "mmap" to allocate the data in the
       heap instead of in the program's data segment.

       When generating code for shared libraries, -fpic implies
       -msmall-data and -fPIC implies -mlarge-data.

リンクされたマニュアルページが更新されました、チェックアウトすることを忘れないでください。
youfu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.