2010年06月08日
gccのトランクにandroid用の変更がマージされた
説明によれば -mandroidというオプションが追加されたようです。
gccの本家のgitのリポジトリからトランクのソースを持ってきて見てみました。
$ grep -r android *
としてみると、gcc/config/arm/eabi.h がマッチしました。
コマンドラインオプション -mandroidをつけるとAndroid特有の環境に合うように内部的にオプションが追加されるようです。例えば
- cc1 --> -fno-exceptions 追加
- cc1plus --> -fno-exceptions -fno-rtti 追加
- ld --> -Bsymbolic -dynamic-linker /system/bin/linker 追加
また、リンク時のスタートアップファイルや標準CライブラリもAndroid用のものに置き換わります。
C++の例外や実行時型情報を使用しないことやダイナミックリンクの方法などがAndroid特有のものです。
現状はこれらのオプションはそれぞれAndroidのビルド環境やNDKのMakefileについているので、この-mandroidオプションは無くても困るものではありません。
自分のソースコードをAndoridに組み込む時にこの-mandroidオプションを使うとMakefileの記述で少し楽ができます。
LinuxカーネルのAndroid向けの変更はマージされずにはじかれてしまいましたが、gccのほうはちゃんとマージされたのですね。もっともカーネルの変更と、このgccの変更では量も重要度も全く違いますが。
2010.6.9追記
このgcc/config/arm/eabi.hは実はけっこう前から入っていたようです。少なくともgcc-4.4.4には入っています。
なんでgcc-4.6のchangedにこのことが書いてあるのか謎です。