Android 4编译错误汇总.docx
《Android 4编译错误汇总.docx》由会员分享,可在线阅读,更多相关《Android 4编译错误汇总.docx(12页珍藏版)》请在冰豆网上搜索。
Android4编译错误汇总
2.Q:
frameworks/base/libs/utils/RefBase.cpp:
483:
67:
error:
passing‘constandroid:
:
RefBase:
:
weakref_impl’as‘this’argumentof‘voidandroid:
:
RefBase:
:
weakref_impl:
:
trackMe(bool,bool)’discardsqualifiers[-fpermissive]
make:
***[out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o]Error1
解决方法:
$geditframeworks/base/libs/utils/Android.mk
修改以下语句
LOCAL_CFLAGS+=-DLIBUTILS_NATIVE=1$(TOOL_CFLAGS)
为
LOCAL_CFLAGS+=-DLIBUTILS_NATIVE=1$(TOOL_CFLAGS)–fpermissive
3.Q:
arm-eabi-gcc:
errortryingtoexec'cc1':
execvp:
Nosuchfileordirectory
make:
***[out/target/product/generic/obj/lib/crtbegin_dynamic.o]Error1
如果之前的依赖包都已经安装成功的话,此处应该是交叉编译工具权限的问题。
这个问题只要在文章开头lunch时执行了赋予权限命令,就应该不会遇到了。
4.Q:
:
0:
0:
error:
"_FORTIFY_SOURCE"redefined[-Werror]
:
0:
0:
note:
thisisthelocationofthepreviousdefinition
cc1plus:
allwarningsbeingtreatedaserrors
make:
***[out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o]Error1
此处编译错误是由于ubuntu11.10采用了GCC4.6.1导致的。
解决方法:
修改源码目录下/build/core/combo/HOST_linux-x86.mk文件:
将以下语句
HOST_GLOBAL_CFLAGS+=-D_FORTIFY_SOURCE=0
修改为
HOST_GLOBAL_CFLAGS+=-U_FORTIFY_SOURCE-D_FORTIFY_SOURCE=0
make:
***[out/host/linux-x86/obj/EXECUTABLES/llvm-rs-cc_intermediates/slang_rs_export_foreach.o]错误1
解决办法是:
找到frameworks/compile/slang/slang_rs_export_foreach.cpp:
的247行,并将本行注释掉即可继续编译。
make:
***[out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o]Error1
后来发现了,原来是Ubuntu11.10里的gcc和g++版本太高了,于是执行下面的操作:
sudoapt-getinstallgcc-4.4
sudoapt-getinstallg++-4.4
sudorm-rf/usr/bin/gcc/usr/bin/g++
sudoln-s/usr/bin/gcc-4.4/usr/bin/gcc
sudoln-s/usr/bin/g++-4.4/usr/bin/g++
把默认的4.6版本换为了4.4,继续编译源码,又出现了另一个错误,大致提示为:
g++selectedmultilib'32'notinstalled
继续奋战吧,安装相应的工具吧:
sudoapt-getinstallg++-4.4-multilib,现在正在make-j8在我的i5/4G机子里跑着。
make:
***[out/host/linux-x86/obj/STATIC_LIBRARIES/libMesa_intermediates/src/glsl/linker.o]Error1
解决这个问题需要修改文件如下:
把"#include"添加到linker.cpp文件头部。
这样就可以编译完成了。
1.错误一:
error:
‘ptrdiff_t’doesnotnameatype
Infileincludedfromexternal/gtest/src/../include/gtest/gtest-param-test.h:
157:
0,
fromexternal/gtest/src/../include/gtest/gtest.h:
69,
fromexternal/gtest/src/gtest_main.cc:
32:
external/gtest/src/../include/gtest/internal/gtest-param-util.h:
122:
11:
error:
‘ptrdiff_t’doesnotnameatype
Infileincludedfromexternal/gtest/src/../include/gtest/gtest-param-test.h:
157:
0,
fromexternal/gtest/src/../include/gtest/gtest.h:
69,
fromexternal/gtest/src/../src/gtest.cc:
34,
fromexternal/gtest/src/gtest-all.cc:
36:
external/gtest/src/../include/gtest/internal/gtest-param-util.h:
122:
11:
error:
‘ptrdiff_t’doesnotnameatype
Infileincludedfromexternal/gtest/src/gtest-all.cc:
38:
0:
解决方法:
$viexternal/gtest/src/../include/gtest/internal/gtest-param-util.h
#include
2.错误二:
undefinedreferenceto`pthread_mutexattr_destroy'
hostC++:
libgtest_host<=external/gtest/src/gtest-all.cc
true
hostC++:
libgtest_main_host<=external/gtest/src/gtest_main.cc
out/host/linux-x86/obj/STATIC_LIBRARIES/libLLVMSupport_intermediates/libLLVMSupport.a(Signals.o):
Infunction`PrintStackTrace':
/home/aa/project/android4.0.1/external/llvm/lib/Support/Unix/Signals.inc:
219:
undefinedreferenceto`dladdr'
/home/aa/project/android4.0.1/external/llvm/lib/Support/Unix/Signals.inc:
231:
undefinedreferenceto`dladdr'
out/host/linux-x86/obj/STATIC_LIBRARIES/libLLVMSupport_intermediates/libLLVMSupport.a(Threading.o):
Infunction`llvm:
:
llvm_execute_on_thread(void(*)(void*),void*,unsignedint)':
/home/aa/project/android4.0.1/external/llvm/lib/Support/Threading.cpp:
96:
undefinedreferenceto`pthread_create'
/home/aa/project/android4.0.1/external/llvm/lib/Support/Threading.cpp:
91:
undefinedreferenceto`pthread_attr_setstacksize'
/home/aa/project/android4.0.1/external/llvm/lib/Support/Threading.cpp:
100:
undefinedreferenceto`pthread_join'
out/host/linux-x86/obj/STATIC_LIBRARIES/libLLVMSupport_intermediates/libLLVMSupport.a(Mutex.o):
Infunction`MutexImpl':
/home/aa/project/android4.0.1/external/llvm/lib/Support/Mutex.cpp:
69:
undefinedreferenceto`pthread_mutexattr_init'
/home/aa/project/android4.0.1/external/llvm/lib/Support/Mutex.cpp:
75:
undefinedreferenceto`pthread_mutexattr_settype'
/home/aa/project/android4.0.1/external/llvm/lib/Support/Mutex.cpp:
80:
undefinedreferenceto`pthread_mutexattr_setpshared'
/home/aa/project/android4.0.1/external/llvm/lib/Support/Mutex.cpp:
89:
undefinedreferenceto`pthread_mutexattr_destroy'
out/host/linux-x86/obj/STATIC_LIBRARIES/libLLVMSupport_intermediates/libLLVMSupport.a(Mutex.o):
Infunction`llvm:
:
sys:
:
MutexImpl:
:
tryacquire()':
/home/aa/project/android4.0.1/external/llvm/lib/Support/Mutex.cpp:
143:
undefinedreferenceto`pthread_mutex_trylock'
collect2:
ldreturned1exitstatus
make:
***[out/host/linux-x86/obj/EXECUTABLES/test-librsloader_intermediates/test-librsloader]Error1
make:
***Waitingforunfinishedjobs....
解决方法:
$viexternal/llvm/llvm-host-build.mk
LOCAL_LDLIBS:
=-lpthread-ldl
下面这个解决方法没成功,会有新的错误:
errorsagain:
can'tfindthreads.hfileordir.
$viexternal/llvm/lib/Support/Android.mk
LOCAL_C_INCLUDES+=system/core/include/cutils
LOCAL_SHARED_LIBRARIES:
=libcutil
$viexternal/llvm/lib/Support/Mutex.cpp
#include
$viexternal/llvm/lib/Support/Threading.cpp
#include
3.错误三:
error:
variable‘ParamName’setbutnotused[-Werror=unused-but-set-variable]
frameworks/compile/slang/slang_rs_export_foreach.cpp:
247:
23:
error:
variable‘ParamName’setbutnotused[-Werror=unused-but-set-variable]
cc1plus:
allwarningsbeingtreatedaserrors
解决方法:
$viframeworks/compile/slang/Android.mk
#local_cflags_for_slang:
=-Wno-sign-promo-Wall-Wno-unused-parameter-Werror
local_cflags_for_slang:
=-Wno-sign-promo-Wall-Wno-unused-parameter
本文介绍在ubuntu11.10系统下编译android2.3.3源码,编译之前请确定上两篇文章(
准备工作完成后,开始编译工作。
下载下来的源码有5G多,如果按照我之前写的获取源码的话,源码目录为~/Android/source
一、环境设置
wayne@wayne-pc:
~/Android/source$sourcebuild/envsetup.sh
includingdevice/htc/passion/vendorsetup.sh
includingdevice/samsung/crespo/vendorsetup.sh
wayne@wayne-pc:
~/Android/source$lunchfull-eng
在lunch时,如果提示permissiondenied权限不够的话,需要在源码根目录下执行,赋予目录下所有文件权限
wayne@wayne-pc:
~/Android/source$sudochmod-R777*
这时候会lunch指令会打印出如下所示文段:
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.3.3
TARGET_PRODUCT=full
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=GRI40
============================================
一、开始编译
编译过程可能会出现许多错误而中止,在此wayne将会把所有遇到的问题以及解决方法一一贴出来,以供以后参考。
1.Q:
wayne@wayne-pc:
~/Android/source$make-j2
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.3.3
TARGET_PRODUCT=full
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=GRI40
============================================
Checkingbuildtoolsversions...
build/core/main.mk:
76:
************************************************************
build/core/main.mk:
77:
Youareattemptingtobuildona32-bitsystem.
build/core/main.mk:
78:
Only64-bitbuildenvironmentsaresupportedbeyondfroyo/2.2.
build/core/main.mk:
79:
************************************************************
build/core/main.mk:
80:
***stop。
停止。
解决方法:
cd到源码根目录,执行:
$geditbuild/core/main.mk
找到
ifneq(64,$(findstring64,$(build_arch)))
将其修改为
ifneq(i686,$(findstringi686,$(build_arch)))
然后依次修改以下四个make文件:
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
2.Q:
frameworks/base/libs/utils/RefBase.cpp:
483:
67:
error:
passing‘constandroid:
:
RefBase:
:
weakref_impl’as‘this’argumentof‘voidandroid:
:
RefBase:
:
weakref_impl:
:
trackMe(bool,bool)’discardsqualifiers[-fpermissive]
make:
***[out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o]Error1
解决方法:
$geditframeworks/base/libs/utils/Android.mk
修改以下语句
LOCAL_CFLAGS+=-DLIBUTILS_NATIVE=1$(TOOL_CFLAGS)
为
LOCAL_CFLAGS+=-DLIBUTILS_NATIVE=1$(TOOL_CFLAGS)–fpermissive
3.Q:
arm-eabi-gcc:
errortryingtoexec'cc1':
execvp:
Nosuchfileordirectory
make:
***[out/target/product/generic/obj/lib/crtbegin_dynamic.o]Error1
如果之前的依赖包都已经安装成功的话,此处应该是交叉编译工具权限的问题。
这个问题只要在文章开头lunch时执行了赋予权限命令,就应该不会遇到了。
4.Q:
:
0:
0:
error:
"_FORTIFY_SOURCE"redefined[-Werror]
:
0:
0:
note:
thisisthelocationofthepreviousdefinition
cc1plus:
allwarningsbeingtreatedaserrors
make:
***[out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o]Error1
此处编译错误是由于ubuntu11.10采用了GCC4.6.1导致的。
解决方法:
修改源码目录下/build/core/combo/HOST_linux-x86.mk文件:
将以下语句
HOST_GLOBAL_CFLAGS+=-D_FORTIFY_SOURCE=0
修改为
HOST_GLOBAL_CFLAGS+=-U_FORTIFY_SOURCE-D_FORTIFY_SOURCE=0
编译时还有可能出现类似的错误,根据错误提示的关键词比如g++错误、jre错误等,都是些细节问题,比较好解决。
经过两小时左右的等待后,终于顺利完成。
编译成功后会生成system.img等镜像文件,下面是编译完成提示:
Targetsystemfsimage:
out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
Installsystemfsimage:
out/target/product/generic/system.img
Installedfilelist:
out/target/product/generic/installed-files.txt
三、启动所编译的系统
编译完之后会在out/target/product/generic目录下生成system.imgramdisk.imguserdata.img三个镜像文件。
在启动模拟器之前,需要先为模拟器系统设置环境变量,执行gedit~/.bashrc,