Android编译问题记录

  • Android系统编译问题

       获取Android源码流程:


  • 从 https://code.google.com/p/git-repo/downloads/list  下载repo脚本

  • repo init -u git://github.com/CyanogenMod/android.git -b cm-10.1 (CM的Android4.2源码)

  • repo sync -j16 (同步源码)

  • ​编译操作看 http://source.android.com/source/initializing.html

1、java版本不兼容

解决方法:一改build/core/main.mk中关于java版本判断的语句,二改build/core/combo/java.mk中的java主版本号,比如把1.5改成1.7

2、/usr/include/features.h:324:26: 致命错误: bits/predefs.h:没有那个文件或目录 

解决方法:sudo apt-get install libc6-dev-i386

3、/usr/bin/ld: cannot find -lstdc++

解决方法:sudo apt-get install g++-multilib

4、Enum.java中 return ordinal - o.ordinal; 语法错误

解决方法:改成return ordinal - o.ordinal();

5、bad class file magic (cafebabe) or version (0033.0000)

解决方法:把jdk1.7换成1.6的,sudo apt-get install openjdk-6-jdk

6、“_FORTIFY_SOURCE”重定义

解决方法:把build/core/combo/HOST_linux-x86.mk中的HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0加一个-U_FORTIFY_SOURCE改为HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0

7、variable ‘ParamName’ set but not used [-Werror=unused-but-set-variable]错误

解决方法:在frameworks/compile/slang/Android.mk里面把

local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter -Werror中的-Werror去掉

8、linker.cpp:1394:49: 错误: expected primary-expression before ‘,’ token

解决方法:在linker.cpp中加上头文件#include "stddef.h"或"cstddef"

9、format_output.h:94:22: 错误: reference ‘counts’ cannot be declared ‘mutable’ [-fpermissive]

解决方法:手动去掉前面的mutable

10、undefined reference to `dladdr'和undefined reference to `pthread_create'

解决方法:在external/llvm/llvm-host-build.mk

中加入LOCAL_LDLIBS := -lpthread -ldl

11、gtest-param-util.h:122:11: 错误: ‘ptrdiff_t’不是一个类型名

解决方法:在gtest-param-util.h中加入#include "cstddef"

12、CtsVerifier_intermediates/classes-full-debug.jar] Error 41</t extends android.app.activity & passfailactivity>

解决办法:有点怪异,两种方法,一是参考http://www.360doc.com/content/12/0314/11/474846_194227428.shtml中的方法不编译CTS模块; 二是参考http://blog.qhm123.com/2012/02/6/fedora-16-x64-compile-android-4.0.3-source-code.html中的直接注释掉//Dialog onCreateDialog(int id, Bundle args);

13、Can't exec "libtoolize": 没有那个文件或目录 at /usr/bin/autoreconf line 196.

解决办法:sudo apt-get install libtool

Android内核交叉编译问题

1、安装arm交叉编译工具

sudo apt-get install gcc-arm-linux-gnueabi cpp-arm-linux-gnueabi

2、改kernel source中的Makefile中的

ARCH ?= arm

CROSS_COMPILE ?= /usr/bin/arm-linux-gnueabi-

或者

$ export ARCH=arm

$ export SUBARCH=arm

$ export CROSS_COMPILE=arm-linux-gnueabi-

或者

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

3、Makefile中

= 是最基本的赋值

:= 是覆盖之前的值

?= 是如果没有被赋值过就赋予等号后面的值

+= 是添加等号后面的值 

4、alignment.c:298:15: 错误: 此函数中的‘offset.un’在使用前可能未初始化

解决方法:看 https://patchwork.kernel.org/patch/1445111/  中的patch对应修改。

5、/tmp/ccNcXwyJ.s:69: Error: selected processor does not support ARM mode `smc 0'

解决方法:看 https://gist.github.com/4395518  中的patch对应修改。

6、arm-linux-gnueabi-gcc: 错误: ":没有那个文件或目录

解决方法:这是一个神经质问题,居然跟我中文环境有关,参考 http://wifihack.net/blog/tag/kernel/  来修改;不过靠谱的修改方法则是 https://github.com/Pivosgroup/buildroot-linux-kernel/commit/1524a2dc8bfbee683384996f434a2a991416c1df 

更靠谱的做法是参考 https://github.com/teamhacksung/android_kernel_samsung_smdk4210_new/commit/3d59d99345aee5d6d1a5f2138e66b8ef049f0dea 中提到的,把Makefile或Makefile.common中所有的-qv exported都改为-E "^[0-9]+"

7、/bin/sh: 1: uudecode: not found

解决方法:sudo apt-get install sharutils

8、net/ipv4/netfilter/nf_nat_standalone.c:287:2:错误

解决方法:这是在主Makefile的KBUILD_CFLAGS中加了-Werror(把所有警告当错误处理)参数,去掉它就可以了。

9、make menuconfig出错:mconf.c:(.text.startup+0x66): undefined reference to `initscr'

解决方法:sudo apt-get install lib32ncurses5-dev

你可能感兴趣的:(Android编译问题记录)