FromNandの日記

自分的備忘録

【GCC】OS開発(組み込み)でよく使用するオプション

https://qiita.com/h_hiro_/items/4db6a7478fb0ff333d9f」が参考になります。

 

【AS・GCC(狭義のコンパイラ)・LDで32bitのバイナリを生成するオプション】

 

as --32

gcc -m32

ld -m elf_i386

 

GCC(コンパイラドライバ)におけるオプション】

 

-Wall

警告をすべて表示する。

 

-nostdinc

ヘッダファイルの検索において、システム標準のディレクトリを対象としない。-Iオプションで指定したディレクトリ(と、状況によるがカレントディレクトリ)のみが検索対象となる。

 

-nostdlib

リンク時にシステムスタートアップのファイルやライブラリを利用しない。明示的に指定したライブラリのみがリンカに渡される。またシステムライブラリを使うためのオプション(-static-libgcc-shared-libgcc)も無視される。

 

-fno-builtin

コンパイラのビルトイン関数を利用しない。

gccでは改行を最後にもつprintfをputsに置き換えたりするが、このようなことを抑制する。

細かいことは「http://blog.kmckk.com/archives/926992.html

 

-fno-pic

位置独立コードの生成。

似たようなオプションや詳細は「https://fromnand.hatenadiary.jp/entry/2019/09/16/000053

 

-mint32

intを32bitとする。

 

-I(アイ)

ヘッダファイルの検索先を指定する。

上のnostdincと組み合わせることが多い。

 

-g

デバッガを利用する場合に指定するとよい。

 

-O(0, 1, 2, s)

-O0は最適化レベル0。

-O1は最適化レベル1。

-O2は最適化レベル2。

-Osはサイズの最適化を行う。

 

-static

ライブラリを静的リンクする。

 

-T

リンカスクリプトを指定する。

-Tを使わずにリンカスクリプトコマンドラインに打ち込んでも勝手に認識するらしいけど...

 

-L

ライブラリの検索先を指定する。

あんまり使わない...??

 

gccコンパイラドライバを意味しているときは、「as」「ld」のオプションも指定できる(当然)。