私はすでに読んだgcc
manページを、私はまだの違いを理解することはできません-fpic
とします-fPIC
。誰かがそれを非常にシンプルで明確な方法で説明できますか?
関連する質問:
私はすでに読んだgcc
manページを、私はまだの違いを理解することはできません-fpic
とします-fPIC
。誰かがそれを非常にシンプルで明確な方法で説明できますか?
関連する質問:
回答:
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
-fPIC
または-fpic
を
使用して、位置に依存しないコードを生成します。位置に依存しないコードを使用する-fPIC
か-fpic
生成するかは、ターゲットに依存します。-fPIC
選択は常に動作しますが、より大きなコードを生成すること-fpic
(これは、コードのより大きな量を生成することのでPICは、より大きな場合にはあるということです覚えておくことがmnenomic)。-fpic
通常、オプションを使用すると、より小さくて高速なコードが生成されますが、グローバルに表示されるシンボルの数やコードのサイズなど、プラットフォームに依存する制限があります。リンカは、共有ライブラリを作成するときに、それが適合するかどうかを教えてくれます。疑問がある場合は、-fPIC
常に機能するため、私はを選択します。
-fPIC
と-fpic
同じコードを生成しているように見えます。m68k、PowerPC、およびSPARCでのみ異なるコードを生成するようです。
以下からの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.
man gcc
が、info gcc
より多くのドキュメントがあります。