ubuntu12.04编译android源码

ubuntu12.04编译android源码

要编译源码,只需在项目根目录下执行make即可。
在32位系统上编译会报错

You are attempting to build on a 32-bit system.

Only 64-bit build environments are supported beyond froyo/2.2.

因为主线上android代码是默认在64位机器上编译的,所以需要修改.mk文件中的编译选项,首先是build/core/main.mk文件。

ifeq ($(BUILD_OS),linux)
build_arch := $(shell uname -m)
ifneq (64,$(findstring 64,$(build_arch)))

改成:

ifeq ($(BUILD_OS),linux)
build_arch := $(shell uname -m)
ifneq (i686,$(findstring i686,$(build_arch)))

除此之外,还需要将external/clearsilver/cgi/Android.mk、external/clearsilver/cs/Android.mk、external/clearsilver/java-jni/Android.mk、external/clerasilver/util/Android.mk这四个文件中的

# This forces a 64-bit build for Java6
LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += -m64

改成:

# This forces a 64-bit build for Java6
LOCAL_CFLAGS += -m32
LOCAL_LDFLAGS += -m32

即可。
编译需要使用gcc4.4版本,太高的gcc版本可能会在编译时报错。

sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
cd /usr/bin
sudo mv gcc gcc.bak
sudo ln -s gcc-4.4 gcc
/usr/bin$ sudo mv g++ g++.bak
/usr/bin$sudo ln -s g++-4.4 g++

修改完这些以后编译,在编译中还可能出现一个问题

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]

make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] 错误 1

这个问题可以通过修改frameworks/base/libs/utils/Android.mk中的

LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)

改成

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

最后再执行make即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值