andriod 编译错误

   近期在进行android源码编译,环境搭建神码痛苦不堪,在编译过程中更是错误不断,想想在windows环境下习惯了,切换到ubuntu上来操作,真真到一时难以适应。

   各位看官,下面问题是出现在-------环境已经正确配置完成,执行make时出现的错误以及解决办法。希望能对大家有所帮助。

    首先说一下,目前环境搭建/系统版本/android版本,

      环境搭建 :大家可以按照官网, source.android.com ,执行。

      系统版本: ubuntu 12.10  32位系统

  android版本 4.0.1r1

  jdk:1.6(这里大家注意,编译android )

      注:1.因为我安装系统语言位中文,如果大家到系统版本位英文 提示错误信息中 “错误” 会为“error”。

             2.以下说多少行,可能会不一样,可以通过查找定位。我使用的grepedit,.

   一. make: *** [out/host/linux-x86/obj/EXECUTABLES/emugen_intermediates/main.o] 错误 1

       或者 make: *** [out/host/linux-x86/obj/EXECUTABLES/emugen_intermediates/main.o] error 1

        解决办法: 需要在  development/tools/emulator/opengl/host/tools/emugen/main.cpp

            在声明中增加一条头文件声明

            #include <getopt.h>

二. frameworks/base/include/utils/KeyedVector.h:193:31: 错误: ‘indexOfKey’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]

   或者 frameworks/base/include/utils/KeyedVector.h:193:31: error: ‘indexOfKey’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]

   解决办法:在 development/tools/emulator/opengl/Android.mk

    增加  '-fpermissive' 到25行:
       EMUGL_COMMON_CFLAGS := -DWITH_GLES2 -fpermissive

三.  make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/AaptAssets.o] 错误 1

    或者 make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/AaptAssets.o] Error 1

   解决办法:  frameworks/base/tools/aapt/Android.mk

       在第31行增加:
       LOCAL_CFLAGS += -Wno-format-y2k -fpermissive

四. make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] 错误 1

    make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] error 1

    解决办法:系版本高,在配置环境的时候,gcc安装了高到版本,所以gcc版本太高导致,需要降低gcc版本级别。

    ubuntu 32bit系统下安装gcc 4.4的最好方法是仅用以下两条命令,不需要其它命令,否则编译时可能会出错。

     sudo apt-get install gcc-4.4

    sudo apt-get install g++-4.4

   操作过程见:

 gcc降级:

  sudo rm -rf /usr/bin/gcc

  sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc

   gcc -v

g++降级

   sudo rm -rf /usr/bin/g++

  sudo ln -s /usr/bin/g++-4.4 /usr/bin/g++

   g++ -v 

演示过程:

View Code

 

View Code

 

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

    或者 make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/AssetManager.o] Error 1
   
    解决办法:在 frameworks/base/libs/utils/Android.mk
   
  在第60行后面增加-fpermissive:   
    
       LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) -fpermissive
 
六. make: *** [out/host/linux-x86/obj/EXECUTABLES/grxmlcompile_intermediates/grxmlcompile.o] 错误 1
    或者 make: *** [out/host/linux-x86/obj/EXECUTABLES/grxmlcompile_intermediates/grxmlcompile.o] Error 1
解决办法:cd external/srec
   复制拷贝下面的命令到终端:
    wget " https://github.com/CyanogenMod/android_external_srec/commit/4d7ae7b79eda47e489669fbbe1f91ec501d42fb2.diff"
    patch -p1 <4d7ae7b79eda47e489669fbbe1f91ec501d42fb2.diff
   rm -f4d7ae7b79eda47e489669fbbe1f91ec501d42fb2.diff
   cd ../..
 
七. make: *** [/home/arun/cm10.1/out/target/product/s100/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/bindings/V8CSSCharsetRule.h] 错误 1
   或者make: *** [/home/arun/cm10.1/out/target/product/s100/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/bindings/V8CSSCharsetRule.h] Error 1
   解决办法:sudo apt-get install libdigest-md5-file-perl
 
八. make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o] 错误 1
     或者 make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o] error 1
  解决办法:

 
 

 

 

 

 

 

make: *** [out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/noproguard.classes-with-local.dex] Error 3  
 
仍然是没有足够的内存。
后来看到一篇资料中有人提到增大交换分区大小,就分了2G给交换分区:
在根目录下创建swap文件夹:
[cpp] 
mkdir swap  
cd swap  
sudo dd if=/dev/zero of=swapfile bs=1024 count=5242880  
sudo mkswap swapfile //把生成的文件转换成 Swap 文件  
sudo swapon swapfile //激活 Swap 文件  
 
再次make不会有以上错误。
卸载swap文件的方法:sudo swapoff swapfile
如果需要一直保持这个 swap ,可以把它写入 /etc/fstab 文件swapfilepath swap swap defaults 0 0,需要用具体操作是 vi打开/etc/fstab 在最后追加 /xxx/xxx swap swap defaults 0 0

 

dalvik/vm/native/dalvik_system_Zygote.cpp: In function ‘int setrlimitsFromArray(ArrayObject*)’:
dalvik/vm/native/dalvik_system_Zygote.cpp:194: error: aggregate ‘rlimit rlim’ has incomplete type and cannot be defined
dalvik/vm/native/dalvik_system_Zygote.cpp:217: error: ‘setrlimit’ was not declared in this scope
make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libdvm_intermediates/native/dalvik_system_Zygote.o] Error 1
make: *** Waiting for unfinished jobs….
marsuu@marsuu-ubuntu:~/BulidPlace/android/ics$ vim dalvik/vm/native/dalvik_system_Zygote.cpp

解决方法

add #include <sys/resource.h> to dalvik/vm/native/dalvik_system_Zygote.cpp

Error:
/usr/bin/ld: note: 'XInitThreads' is defined in DSO /lib/libX11.so.6 so try adding it to the linker command line
/lib/libX11.so.6: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/EXECUTABLES/emulator_renderer_intermediates/emulator_renderer] Error 1

Fix:
vi development/tools/emulator/opengl/host/renderer/Android.mk

Add new entry 'LOCAL_LDLIBS += -lX11' after line 6 as shown:
LOCAL_SRC_FILES := main.cpp
LOCAL_CFLAGS    += -O0 -g
LOCAL_LDLIBS += -lX11

#ifeq ($(HOST_OS),windows)
#LOCAL_LDLIBS += -lws2_32 \


make: *** [out/host/linux-x86/obj/lib/libOpenglRender.so] 错误 1
host StaticLib: libOpenglCodecCommon (out/host/linux-x86/obj/STATIC_LIBRARIES/libOpenglCodecCommon_intermediates/libOpenglCodecCommon.a)
host SharedLib: libOpenglRender (out/host/linux-x86/obj/lib/libOpenglRender.so)
/usr/bin/ld: cannot find -lX11
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/lib/libOpenglRender.so] 错误 1

首先安装这两个库文件的32位版本:

$ sudo apt-get install libx11-dev:i386(libX11.so)

$ sudo apt-get install libgl1-mesa-glx:i386 (libGL.so)

由于libGL.so系统默认没有进行库路径下的链接,还需要手动链接一下

$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so


host StaticLib: libGLcommon (out/host/linux-x86/obj/STATIC_LIBRARIES/libGLcommon
 _intermediates/libGLcommon.a)
 host SharedLib: libGLES_CM_translator (out/host/linux-x86/obj/lib/libGLES_CM_tra
 nslator.so)
 /usr/bin/ld: cannot find -lGL
 collect2: ld returned 1 exit status
 make: *** [out/host/linux-x86/obj/lib/libGLES_CM_translator.so] Error 1


解决方法: sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/libGL.so 

在网上搜到上面的解决方法,可是按照上述方法做了,问题依旧。经过多方实验,才发现问题所在。通过apt-get install的库不是libGL.so.1.2了。而是libGL.so.1.2.0.
 
所以大家在创建链接的时候最好去/usr/lib/i386-linux-gnu/mesa/这个目录下看看libGL的库版本,不要完全按照网上的照抄。现在网上的都是“sudo
 
ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/libGL.so ”而我的是sudo
 
ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0  /usr/lib/libGL.so 。可能库最近升级了。
 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值