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