近期在进行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
四. 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
演示过程:
![](https://i-blog.csdnimg.cn/blog_migrate/cdec0645add3fc3c328197dda5c76203.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cdec0645add3fc3c328197dda5c76203.gif)
五.make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/AssetManager.o] 错误 1
解决办法:cd external/srec
wget " https://github.com/CyanogenMod/android_external_srec/commit/4d7ae7b79eda47e489669fbbe1f91ec501d42fb2.diff"
patch -p1 <4d7ae7b79eda47e489669fbbe1f91ec501d42fb2.diff
rm -f4d7ae7b79eda47e489669fbbe1f91ec501d42fb2.diff
cd ../..
libdigest-md5-file-perl
或者 make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o] error 1
解决办法:
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 。可能库最近升级了。