-fminshared オプションは、コンパイル単位がメイン・プログラム・コンポーネントの一部になり、共有可能なオブジェクトの一部としてリンクされないことを示します。メインプログラムで定義されたシンボルはプリエンプトできないため、このオプションにより、コンパイラーは default 可視属性で宣言されたシンボルを protected 可視属性であるかのように扱います (つまり、-fminshared は -fvisibility=protected を暗示します)。また、コンパイラーは位置に依存しないコードをメインプログラム用に生成する必要はありません。グローバル・オフセット・テーブル (GOT) のサイズを減らしてメモリーのトラフィックを減らす、絶対アドレス指定を使用することができます。
-fpic オプションは、完全なシンボル・プリエンプションを指定します。グローバルシンボル定義は、明示的にほかの方法で指定されなければ、グローバルシンボル参照と同様に default 可視属性 (つまり、プリエンプト可能) になります。
通常、初期化子がなく、extern または static キーワード
"int i;"
のないファイルスコープ宣言では、共通シンボルとして表現されます。他のコンパイル単位にその名前用のグローバル定義がない場合を除いて、これらのシンボルは外部参照として扱われ、リンカーはこれらのシンボルにメモリーを割り当てます。-fno-common オプションは、通常は共通シンボルとして扱われるシンボルをグローバル定義として扱い、コンパイル時にメモリーを割り当てるようにします。これにより、コンパイラーはシンボルにアクセスするときに、より効率的な GP 相対アドレス指定を使用することができます。