4958|3

854

帖子

0

TA的资源

五彩晶圆(中级)

楼主
 

[转载]32位ubuntu编译android4.0.4问题 [复制链接]

问题一:在32位Ubuntu12.04上编译Android4.0.4源码时,出现了关于emulator的错误,关键是其Makefile里的-m64参数,将其用-m32代替即可,错误提示如下:
    ERROR: prebuilts/tools/gcc-sdk/../../gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/bin/x86_64-linux-gcc only run on 64-bit linux
    make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/emulator64-target-arm_intermediates/tcg/tcg.o] Error 1
    涉及需要改的文件如下:
    external/qemu/Makefile.target
       external/qemu/Makefile.common
       参考网址:http://www.eoeandroid.com/home.php?mod=space&uid=23065&do=blog&id=2778
              http://www.cnblogs.com/jqyp/archive/2012/02/27/2369291.html
              http://www.eoeandroid.com/blog-636394-2916.html
    问题二:编译时出现如下提示:
            target Dex: core
            Error occurred during initialization of VM
            Could not reserve enough space for object heap
            Could not create the Java virtual machine.
            make: *** [out/target/common/obj/JAVA_LIBRARIES/core_intermediates/noproguard.classes-with-local.dex] Error 1
    查找build/core/definitions.mk文件发现如下内容:
    #TODO: use a smaller -Xmx value for most libraries;
    #      only core.jar and framework.jar need a heap this big.
    # Avoid the memory arguments on Windows, dx fails to load for some reason with them.
    define transform-classes.jar-to-dex
    @echo "target Dex: $(PRIVATE_MODULE)"
    @mkdir -p $(dir $@)
    $(hide) $(DX) \
        $(if $(findstring windows,$(HOST_OS)),,-JXms16M -JXmx2048M) \
        --dex --output=$@ \
        $(incremental_dex) \
        $(if $(NO_OPTIMIZE_DX), \
            --no-optimize) \
        $(if $(GENERATE_DEX_DEBUG), \
                --debug --verbose \
                --dump-to=$(@:.dex=.lst) \
                --dump-width=1000) \
        $(PRIVATE_DX_FLAGS) \
        $<
    endef
    由于我的电脑只有2GB的内容,那么上面的2048M肯定满足不了,因为linux分配时还需分配给内核内存,故将该参数调小为1024M。
    继续编译还会出现一些关于emulator的错误,而查阅了google官方资料,说是要在64bit系统上编译,换成64位的后,没出现什么错误,编译一切正常。
    参考网址:http://www.360doc.com/content/12/0317/09/1801810_195071521.shtml
此帖出自Linux开发论坛
点赞 关注
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460

回复
举报

854

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 
多找几篇经验文章
可能是google开发人员写的makefile文件中判断系统位数出现bug了
源头没有找到,只是多做了一些判断而已。大家可以试看看。我这里是通过了。

ERROR: prebuilts/tools/gcc-sdk/../../gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/bin/x86_64-linux-gcc only run on 64-bit linux
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/emulator64-target-arm_intermediates/tcg/tcg.o] Error 1
make: *** Waiting for unfinished jobs....


external/qemu/Makefile.target

252 line,
    LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
换成

    ifneq ($(BUILD_HOST_64bit),)
    LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
    else
      ifneq ($(HOST_ARCH),x86_64)
    LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m32
      endif
    endif


external/qemu/Makefile.target

446 line,
        LOCAL_LDLIBS += $(common_LOCAL_LDLIBS) -m64
        LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
换成

    ifneq ($(BUILD_HOST_64bit),)
        LOCAL_LDLIBS += $(common_LOCAL_LDLIBS) -m64
        LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
    else
      ifneq ($(HOST_ARCH),x86_64)
        LOCAL_LDLIBS += $(common_LOCAL_LDLIBS) -m32
        LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m32
      endif
    endif


external/qemu/Makefile.common

149 line,
    LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
换成

    ifneq ($(BUILD_HOST_64bit),)
    LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
    else
      ifneq ($(HOST_ARCH),x86_64)
    LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m32
      endif
    endif

301 line,
        LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
换成

    ifneq ($(BUILD_HOST_64bit),)
        LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
    else
      ifneq ($(HOST_ARCH),x86_64)
        LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m32
      endif
    endif

641 line,
LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -I$(intermediates) -m64
换成

    ifneq ($(BUILD_HOST_64bit),)
        LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -I$(intermediates) -m64
    else
      ifneq ($(HOST_ARCH),x86_64)
        LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -I$(intermediates) -m32
      endif
    endif

730 line,
    LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
换成

    ifneq ($(BUILD_HOST_64bit),)
    LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
    else
      ifneq ($(HOST_ARCH),x86_64)
    LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m32
      endif
    endif
此帖出自Linux开发论坛
 
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460
 

回复

854

帖子

0

TA的资源

五彩晶圆(中级)

板凳
 

android 4.0.3最新源码下载编译

android 4.0.3最新源码下载编译
最新的android4.0源代码公布以后,相信很多人和我一样都跃跃欲试,其实4.0的代码下载和编译和以前的版本差不多,但是有一些小的差别,写下来供不明真相的新手来参考
首先,开发环境,google建议在ubuntu10.0.4下,并且最好是64位,既然是为了工作和学习,就尽量按照官方要求的来吧。
Python 2.5 -- 2.7  ubuntu10.0.4已经默认安装了,所以不需要安装,其他环境需要安装
JDK 6   编译4.0需要jdk 6 ,sdk的编译需要jdk 5
Git 1.7 or newer
如果你的ubuntu是32位的,请在源码下载后编译前按以下步骤修改:
下载完源码后,修改下面四个文件:external/clearsilver/cgi/Android.mk
                                                            external/clearsilver/java-jni/Android.mk
                                                           external/clearsilver/util/Android.mk
                                                          external/clearsilver/cs/Android.mk
将其中的 LOCAL_CFLAGS += –m64
                LOCAL_LDFLAGS += –m64
修改为    LOCAL_CFLAGS += –m32
               LOCAL_LDFLAGS += –m32
在build/core/main.mk
找到  ifneq (64,$(findstring 64,$(build_arch)))
将其修改为 ifneq (i686,$(findstring i686,$(build_arch)))
如果你装的ubuntu是最新的11.04打头的,由于内核版本的bug可能会在编译的最后出现头文件丢失的错误比如:,请按照以下方法修复:
repo download platform/external/qemu 22776/1  如果你是10.0.4就不要做多余的事情了,如果你修复了,编译出的版本可能会出现黑屏现象进入不了系统,切记!
编译的环境不同,碰到的问题也会千奇百怪,如果你编译出问题了请养成google和百度的习惯
  1:jdk的安装比较简单,就不做介绍了
  2:安装依赖库:
        64-bit:
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \  zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \  x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \  libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \  libxml2-utils xsltproc32-bit$ sudo apt-get install git-core gnupg flex bison gperf build-essential \  zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \  libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \  libxml2-utils xsltproc
     On Ubuntu 10.10:
    $ sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so
     On Ubuntu 11.10:
    $ sudo apt-get install libx11-dev:i386 3:下载Repo
$ mkdir ~/bin $ PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo $ chmod a+x ~/bin/repo
4: 创建源码目录:
$ mkdir ANDROID_SOURCE$ cd ANDROID_SOURCE
5: 获取git上的android源码版本$ repo init -u https://android.googlesource.com/platform/manifest我们下载最新版$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.3_r1此时需要你填写用户名和email填写后即可执行同步命令6:下载源码$ repo sync可加参数: -jx x代表开启多少个线程来下载源码源码+repo  一共13G左右(因为repo会自动执行check out 命令)如果中间出错或者网络不稳定,可以重新初始化repo,用同一个email即可实现本地git库和服务器git库的同步编译源码

下载完源码后进入源码主目录 1 :执行:$ source build/envsetup.shsouce命令执行的是源码包build目录下的envsetup文件可以看出这个文件里定义了很多函数供编译使用function help()
function get_abs_build_var()
function get_build_var()
function check_product()
function check_variant()
function setpaths()
function printconfig()
function set_stuff_for_environment()
function set_sequence_number()
function settitle()
function choosetype()
function chooseproduct()
function choosevariant()
function tapas()
function choosecombo()
function print_lunch_menu()
function lunch()
function gettop
function m()
function findmakefile()
function mm()
function mmm()
function croot()
function pid()
function gdbclient()
function jgrep()
function cgrep()
function resgrep()
function getprebuilt
function tracedmdump()
function runhat()
function getbugreports()
function startviewserver()
function stopviewserver()
function isviewserverstarted()
function smoketest()
function runtest()
function runtest_py()
function godir ()
2:选择一个target$ lunch full-eng我们编译后在模拟器中运行,所以选择full我们选择最大的权限,也就是root后的版本,所以选择eng3:编译源码$ make -j4过程大概3小时编译完后在源码目录下会生成out文件夹如图好了,可以检验以下我们编译的源码是否正常运行了$ emulator如果提示找不到命令,请初始化环境$ source build/envsetup.sh
$ lunch full-eng ok,android源码顺利完成,明天进行内核的编译
http://www.cnblogs.com/jqyp/archive/2012/02/27/2369291.html


此帖出自Linux开发论坛
 
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460
 
 

回复

854

帖子

0

TA的资源

五彩晶圆(中级)

4
 

O(∩_∩)O~我一个字没改,前两天编译居然通过了,不过要四个半小时。
下进去在S5PV210 上跑,那个效果嘎嘎叫的。非常牛B!
速度比android2.3 快一半,也比较稳定,烤鸡好几天了,速度很猛。
此帖出自Linux开发论坛
 
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表