Mac OS Xの下でAndroid Sourceコンパイル環境を構築する問題と解決方法

2990 ワード

〔転送は出典を明記してください、ありがとうございます〕
本稿のコンパイル環境とはAndroid Kernel,Frameworkのコンパイルであり,Applicationの開発環境ではない.
詳細な説明があるのはリンクと要点のヒントだけです.
大きなステップはAndroidのソースサイトの原文です
「Initializing a Build Environment」のSettings up a Mac OS X build environmentセクション.
要点:
1.case-sensitive disk imageを作成する.の質問
原文では~/.bash_profileファイルmountAndroidコマンドを追加します.多くの人がこの書類を見つけられない.
実は、デフォルトのMac OS Xにはこのファイルはありません.以下を参考に解決できる
「MACに.bash_profileが見つかりません.どうすればいいですか?」リンク:http://blog.csdn.net/edai9508/article/details/6006269
つまり、このファイルを自分で作成し、追加内容を編集し、編集して保存した後に実行します.
source .bash_profile

を選択して設定を更新します.
2.Xcodeの問題
Android公式推奨装Xcode 3.1.4バージョンですが、まず4.xですが、実は主にMacOS SDK 10.5です.
リンクを参照:
(1)AndroidのMAC OSX上でのコンパイルにおける10.5 SDKの欠如問題の解決
リンク:http://blog.csdn.net/dragon1225/article/details/7061076
〔注釈:リンク記事はコンパイル時のstrnlenのエラー問題に言及し、これは以下に列挙する〕
(2)10.5のSDKパッケージはこちらからダウンロードできます
http://blog.csdn.net/guoguoljg/article/details/7300940
3.Macportで関連パッケージをインストール中に発生した問題
(1)Python 27のインストールエラー、解決策:自分でソースを探してインストールすればいい;
(2)xzエラー(Pythonと関係があるようです):自分でxz sudo port install xzを手動でインストールします;
4.Androidのコンパイルで発生した問題
(1)問題error:elf.h: No such file or directory
理由:Macにelfが欠けている.hファイル
解決策:ここを参考にhttp://blog.csdn.net/quaful/article/details/6053708
思想:ネット上の次のelfヘッダファイルからscripts/mod/フォルダに入れて、2つのファイルmk_を修正しますelfconfig.cとmodpost.h
#includeを#include“elf.h”に変更
(2)問題error:static declaration of‘strnlen’follows non-static declaration
/usr/include/string.h:143: error: previous declaration of ‘strnlen’ was here
理由:ソリューションによってこのstrnlenを発見する際に余分な
ソリューション1、この関数を置き換え、参照http://dyf128.iteye.com/blog/1258943
シナリオ2、関数の周辺はマクロをプラスしてあるいは注釈を落として、参考
私は案2を採用して、参考にします
#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070 
static inline size_t strnlen (const char *__string, size_t __maxlen)
{
	int len = 0;
	while (__maxlen-- && *__string++)
		len++;
	return len;
}
#endif

いずれの案も次の新しい問題を引き起こす.
(3)質問warning:ignoring file out/host/darwin-x 86/obj/STATIC_LIBRARIES/  libSDL_intermediates/libSDL.a, file was built for archive which is not  the architecture being linked (i386)  Undefined symbols for architecture i386
原因:不明
解決:Androidを注釈する.mkのすべての内容
参照先:
# the following test is made to detect that we were called
# through the 'm' or 'mm' build commands. if not, we use the
# standard QEMU Makefile
#
###################Comment by Damon on June 28, 2012###########################
#ifeq ($(DEFAULT_GOAL),droid)
#    LOCAL_PATH:= $(call my-dir)
#    include $(LOCAL_PATH)/Makefile.android
#else
#    include Makefile.qemu
#endif
##############################################################

関連リファレンス
i) http://dyf128.iteye.com/blog/1258943
ii) http://groups.google.com/group/android-building/browse_thread/thread/bd566c8b513a4946
iii) http://www.linuxidc.com/Linux/2012-06/61754.htm