Happy My Life

日常とか技術とか

Android 2.3 & gcc 4.6でのビルドメモ

Android 2.3(rowboat 2.3.4) & Ubuntu 11.10(gcc 4.6)の組み合わせだとビルド中にいくつかコケる点があるので、そのメモ。原因は、gcc 4.6に由来するものなので、ubuntu 10.04使えば問題ないのだが。

その1

ビルド中に以下のようなエラーが出力される

    host Executable: acp (out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp)
    host SharedLib: libneo_cs (out/host/linux-x86/obj/lib/libneo_cs.so)
    host C++: libutils <= frameworks/base/libs/utils/RefBase.cpp
    frameworks/base/libs/utils/RefBase.cpp: In member function ‘void android::RefBase::weakref_type::trackMe(bool, bool)’:
    frameworks/base/libs/utils/RefBase.cpp:483:67: error: passing ‘const android::RefBase::weakref_impl’ as ‘this’ argument of ‘void android::RefBase::weakref_impl::trackMe(bool, bool)’ discards qualifiers [-fpermissive]

この修正方法は

$ gedit frameworks/base/libs/utils/Android.mk

Android.mkを開いて

LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)

LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) -fpermissive

に変更する。参考元はHow to fix problem of incompatibility between GCC 4.6 and Android 2.3 (Gingerbread) « Buildallより

その2

ビルド中にずーっと “_FORTIFY_SOURCE redefined"といったワーニングが表示されつづけるのだが、ビルド中にgccに”-Werror"オプションが設定されて、ビルドがとまってしまう。 ということで、ワーニングを出ないようにする。

$ gedit build/core/combo/HOST_linux-x86.mk

でファイルを開いて

HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0

HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0

に変更する。

これはAOSPあてにpatchが投げられており半年前に修正済み。新しいバージョンをビルドするなら問題にならないけど古いソースをビルドするときは注意が必要。Pull Request #1: Fix GCC 4.6 build error (_FORTIFY_SOURCE redefined) by jlebar · cgjones/android-build

組み込みAndroid エキスパート テクニックブック
出村成和
シーアンドアール研究所
売り上げランキング: 10562