从ubuntu下迁移过来,首要的一个问题需要解决,那就是如何解决android编译问题?我们知道android源码的编译,android官方(http://source.android.com/)推荐64位ubuntu(10.04--11.10),对于其他linux版本的编译,完全需要自己的琢磨,不得不说android,你大爷的。说归说,骂归骂,还是要靠android吃饭的,所以自己来搞定一切吧(这也是linux geek的一个习惯):P
闲言少叙,且归正题。既然编译android,那么一些必备的工具是必须的,在这方面,ubuntu当然有官方的详细资料,对于fedora的建议:装系统时,请将编译链(gcc,g++,相关编译库)全部安装,否则出现了问题则得不尝失。
一般需要的工具:
- Python 2.5--2.7
- Gnu make 3.8.1
- JDK 1.6(非OpenJdk1.6)
- Git 1.7+
cd src_root . build/envsetup.sh lunch full_eng make首先出现的第一个问题是make的版本问题,fedora 16默认make版本是3.8.2,如果执行make后会出现下面的类似错误:
warning * Android can only be built by version 3.81.)解决的方法,很简单,编辑build/core/main.mk:
vim build/core/main.mk注释掉41--48行就ok。
接下来你会遇到g++版本兼容性问题,例如发生在frameworks/compile/slang/slang_rs_export_foreach.cpp文件的编译错误:
frameworks/compile/slang/slang_rs_export_foreach.cpp: 在静态成员函数 ‘static slang::RSExportForEach* slang::RSExportForEach::Create(slang::RSContext*, const clang::FunctionDecl*)’中: frameworks/compile/slang/slang_rs_export_foreach.cpp:249:23: 错误:variable ‘ParamName’ set but not used [-Werror=unused-but-set-variable] cc1plus: all warnings being treated as errors make: *** [out/host/linux-x86/obj/EXECUTABLES/llvm-rs-cc_intermediates/slang_rs_export_foreach.o] 错误 1解决方法,注释掉249行代码:
llvm::StringRef ParamName = PVD->getName();接下来是一个perl的编译问题,缺少gperf,则安装;然后是fedora 16中的perl版本将switch的module拿掉了,出现下面的编译错误:
Can't locate Switch.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .) at external/webkit/Source/WebCore/make-hash-tools.pl line 23. BEGIN failed--compilation aborted at external/webkit/Source/WebCore/make-hash-tools.pl line 23.解决方法是修改external/webkit/Source/WebCore/make-hash-tools.pl文件(以下解决方法均采用git diff方式显示):
diff --git a/Source/WebCore/make-hash-tools.pl b/Source/WebCore/make-hash-tools.pl
index 37639eb..9f85002 100644
--- a/Source/WebCore/make-hash-tools.pl
+++ b/Source/WebCore/make-hash-tools.pl
@@ -20,7 +20,7 @@
# Boston, MA 02110-1301, USA.
use strict;
-use Switch;
+use feature qw(switch);
use File::Basename;
my $outdir = $ARGV[0];
@@ -28,9 +28,9 @@ shift;
my $option = basename($ARGV[0],".gperf");
-switch ($option) {
+given ($option) {
-case "DocTypeStrings" {
+when ("DocTypeStrings") {
my $docTypeStringsGenerated = "$outdir/DocTypeStrings.cpp";
my $docTypeStringsGperf = $ARGV[0];
@@ -40,7 +40,7 @@ case "DocTypeStrings" {
} # case "DocTypeStrings"
-case "ColorData" {
+when ("ColorData") {
my $colorDataGenerated = "$outdir/ColorData.cpp";
my $colorDataGperf = $ARGV[0];
接下来还有很多的错误,不再一一贴出具体错误,集中一下:
1.build/core/combo/HOST_linux-x86.mk文件
diff --git a/core/combo/HOST_linux-x86.mk b/core/combo/HOST_linux-x86.mk
index 5ae4972..7df2893 100644
--- a/core/combo/HOST_linux-x86.mk
+++ b/core/combo/HOST_linux-x86.mk
@@ -53,6 +53,6 @@ HOST_GLOBAL_CFLAGS += \
-include $(call select-android-config-h,linux-x86)
# Disable new longjmp in glibc 2.11 and later. See bug 2967937.
-HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0
+HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
HOST_NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined
2.development/tools/emulator/opengl/host/renderer/Android.mk文件
diff --git a/tools/emulator/opengl/host/renderer/Android.mk b/tools/emulator/opengl/host/renderer/Android.mk index 55fcb80..613179c 100644 --- a/tools/emulator/opengl/host/renderer/Android.mk +++ b/tools/emulator/opengl/host/renderer/Android.mk @@ -6,6 +6,8 @@ $(call emugl-import,libOpenglRender) LOCAL_SRC_FILES := main.cpp LOCAL_CFLAGS += -O0 -g +LOCAL_LDLIBS += -lX11 + #ifeq ($(HOST_OS),windows) #LOCAL_LDLIBS += -lws2_32 #endif3.external/gtest下修改的文件
diff --git a/include/gtest/internal/gtest-param-util.h b/include/gtest/internal/gtest-param-util.h index 5559ab4..2927f02 100644 --- a/include/gtest/internal/gtest-param-util.h +++ b/include/gtest/internal/gtest-param-util.h @@ -37,6 +37,8 @@ #include <iterator> #include <utility> #include <vector> +#include <stddef.h> +#include <cstddef> #include <gtest/internal/gtest-port.h> diff --git a/src/Android.mk b/src/Android.mk index 2465e16..6e3facb 100644 --- a/src/Android.mk +++ b/src/Android.mk @@ -49,7 +49,7 @@ LOCAL_SRC_FILES := gtest-all.cc LOCAL_C_INCLUDES := $(libgtest_host_includes) -LOCAL_CFLAGS += -O0 +LOCAL_CFLAGS += -O0 -Wno-missing-field-initializers LOCAL_MODULE := libgtest_host LOCAL_MODULE_TAGS := eng4.external/llvm/llvm-host-build.mk文件
diff --git a/llvm-host-build.mk b/llvm-host-build.mk
index 5219efd..53a6229 100644
--- a/llvm-host-build.mk
+++ b/llvm-host-build.mk
@@ -10,6 +10,8 @@ LOCAL_CFLAGS := \
-Wwrite-strings \
$(LOCAL_CFLAGS)
+LOCAL_LDLIBS := -lpthread -ldl
+
ifeq ($(LLVM_ENABLE_ASSERTION),true)
LOCAL_CFLAGS := \
-D_DEBUG \
5.external/mesa3d/src/glsl/linker.cpp文件
diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index f8b6962..f31e5b5 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -67,6 +67,7 @@
#include <cstdio>
#include <cstdarg>
#include <climits>
+#include <stddef.h>
#include <pixelflinger2/pixelflinger2_interface.h>
@@ -1762,4 +1763,4 @@ done:
}
//hieralloc_free(mem_ctx);
-}
\ No newline at end of file
+}
6.external/oprofile/libpp/format_output.h文件
diff --git a/libpp/format_output.h b/libpp/format_output.h
index b6c4592..8e527d5 100644
--- a/libpp/format_output.h
+++ b/libpp/format_output.h
@@ -91,7 +91,7 @@ protected:
symbol_entry const & symbol;
sample_entry const & sample;
size_t pclass;
- mutable counts_t & counts;
+ counts_t & counts;
extra_images const & extra;
double diff;
};
这还不算完,接下来是一个java编译错误:
target Java: CubeLiveWallpapers (out/target/common/obj/APPS/CubeLiveWallpapers_intermediates/classes)
PassFailButtons.java:191: android.app.Activity 中的 onCreateDialog(int,android.os.Bundle)
无法实现 com.android.cts.verifier.PassFailButtons.PassFailActivity 中的 onCreateDialog(int,android.os.Bundle);
正在尝试指定更低的访问权限;为 public
private static
^
注意:某些输入文件使用或覆盖了已过时的 API。
注意:要了解详细信息,请使用 -Xlint:deprecation 重新编译。
1 错误
make: *** [out/target/common/obj/APPS/CtsVerifier_intermediates/classes-full-debug.jar] 错误 41
解决方法如下:
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/PassFailButtons.java
b/apps/CtsVerifier/src/com/android/cts/verifier/PassFailButtons.java
index 9991b9d..f091c75 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/PassFailButtons.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/PassFailButtons.java
@@ -77,7 +77,7 @@ public class PassFailButtons {
Button getPassButton();
/* Added to the interface just to make sure it isn't forgotten in the implementations. */
- Dialog onCreateDialog(int id, Bundle args);
+ // Dialog onCreateDialog(int id, Bundle args);
/**
* Returns a unique identifier for the test. Usually, this is just the class name.
最后贴一下总的修改,使用repo diff列出:
解决方法如下:
project build/
diff --git a/core/combo/HOST_linux-x86.mk b/core/combo/HOST_linux-x86.mk
index 5ae4972..7df2893 100644
--- a/core/combo/HOST_linux-x86.mk
+++ b/core/combo/HOST_linux-x86.mk
@@ -53,6 +53,6 @@ HOST_GLOBAL_CFLAGS += \
-include $(call select-android-config-h,linux-x86)
# Disable new longjmp in glibc 2.11 and later. See bug 2967937.
-HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0
+HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
HOST_NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined
diff --git a/core/main.mk b/core/main.mk
index 569d4dc..560c027 100644
--- a/core/main.mk
+++ b/core/main.mk
@@ -38,14 +38,14 @@ endif
#endif
# check for broken versions of make
-ifeq (0,$(shell expr $$(echo $(MAKE_VERSION) | sed "s/[^0-9\.].*//") = 3.81))
-$(warning ********************************************************************************)
-$(warning * You are using version $(MAKE_VERSION) of make.)
-$(warning * Android can only be built by version 3.81.)
-$(warning * see http://source.android.com/source/download.html)
-$(warning ********************************************************************************)
-$(error stopping)
-endif
+#ifeq (0,$(shell expr $$(echo $(MAKE_VERSION) | sed "s/[^0-9\.].*//") = 3.81))
+#$(warning ********************************************************************************)
+#$(warning * You are using version $(MAKE_VERSION) of make.)
+#$(warning * Android can only be built by version 3.81.)
+#$(warning * see http://source.android.com/source/download.html)
+#$(warning ********************************************************************************)
+#$(error stopping)
+#endif
TOP := .
TOPDIR :=
project cts/
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/PassFailButtons.java b/apps/CtsVerifier/src/com/android/cts/verifier/PassFailButtons.java
index 9991b9d..f091c75 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/PassFailButtons.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/PassFailButtons.java
@@ -77,7 +77,7 @@ public class PassFailButtons {
Button getPassButton();
/* Added to the interface just to make sure it isn't forgotten in the implementations. */
- Dialog onCreateDialog(int id, Bundle args);
+ // Dialog onCreateDialog(int id, Bundle args);
/**
* Returns a unique identifier for the test. Usually, this is just the class name.
project development/
diff --git a/tools/emulator/opengl/host/renderer/Android.mk b/tools/emulator/opengl/host/renderer/Android.mk
index 55fcb80..613179c 100644
--- a/tools/emulator/opengl/host/renderer/Android.mk
+++ b/tools/emulator/opengl/host/renderer/Android.mk
@@ -6,6 +6,8 @@ $(call emugl-import,libOpenglRender)
LOCAL_SRC_FILES := main.cpp
LOCAL_CFLAGS += -O0 -g
+LOCAL_LDLIBS += -lX11
+
#ifeq ($(HOST_OS),windows)
#LOCAL_LDLIBS += -lws2_32
#endif
project external/gtest/
diff --git a/include/gtest/internal/gtest-param-util.h b/include/gtest/internal/gtest-param-util.h
index 5559ab4..2927f02 100644
--- a/include/gtest/internal/gtest-param-util.h
+++ b/include/gtest/internal/gtest-param-util.h
@@ -37,6 +37,8 @@
#include <iterator>
#include <utility>
#include <vector>
+#include <stddef.h>
+#include <cstddef>
#include <gtest/internal/gtest-port.h>
diff --git a/src/Android.mk b/src/Android.mk
index 2465e16..6e3facb 100644
--- a/src/Android.mk
+++ b/src/Android.mk
@@ -49,7 +49,7 @@ LOCAL_SRC_FILES := gtest-all.cc
LOCAL_C_INCLUDES := $(libgtest_host_includes)
-LOCAL_CFLAGS += -O0
+LOCAL_CFLAGS += -O0 -Wno-missing-field-initializers
LOCAL_MODULE := libgtest_host
LOCAL_MODULE_TAGS := eng
project external/llvm/
diff --git a/llvm-host-build.mk b/llvm-host-build.mk
index 5219efd..53a6229 100644
--- a/llvm-host-build.mk
+++ b/llvm-host-build.mk
@@ -10,6 +10,8 @@ LOCAL_CFLAGS := \
-Wwrite-strings \
$(LOCAL_CFLAGS)
+LOCAL_LDLIBS := -lpthread -ldl
+
ifeq ($(LLVM_ENABLE_ASSERTION),true)
LOCAL_CFLAGS := \
-D_DEBUG \
project external/mesa3d/
diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index f8b6962..f31e5b5 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -67,6 +67,7 @@
#include <cstdio>
#include <cstdarg>
#include <climits>
+#include <stddef.h>
#include <pixelflinger2/pixelflinger2_interface.h>
@@ -1762,4 +1763,4 @@ done:
}
//hieralloc_free(mem_ctx);
-}
\ No newline at end of file
+}
project external/oprofile/
diff --git a/libpp/format_output.h b/libpp/format_output.h
index b6c4592..8e527d5 100644
--- a/libpp/format_output.h
+++ b/libpp/format_output.h
@@ -91,7 +91,7 @@ protected:
symbol_entry const & symbol;
sample_entry const & sample;
size_t pclass;
- mutable counts_t & counts;
+ counts_t & counts;
extra_images const & extra;
double diff;
};
project external/webkit/
diff --git a/Source/WebCore/make-hash-tools.pl b/Source/WebCore/make-hash-tools.pl
index 37639eb..9f85002 100644
--- a/Source/WebCore/make-hash-tools.pl
+++ b/Source/WebCore/make-hash-tools.pl
@@ -20,7 +20,7 @@
# Boston, MA 02110-1301, USA.
use strict;
-use Switch;
+use feature qw(switch);
use File::Basename;
my $outdir = $ARGV[0];
@@ -28,9 +28,9 @@ shift;
my $option = basename($ARGV[0],".gperf");
-switch ($option) {
+given ($option) {
-case "DocTypeStrings" {
+when ("DocTypeStrings") {
my $docTypeStringsGenerated = "$outdir/DocTypeStrings.cpp";
my $docTypeStringsGperf = $ARGV[0];
@@ -40,7 +40,7 @@ case "DocTypeStrings" {
} # case "DocTypeStrings"
-case "ColorData" {
+when ("ColorData") {
my $colorDataGenerated = "$outdir/ColorData.cpp";
my $colorDataGperf = $ARGV[0];
project frameworks/compile/slang/
diff --git a/slang_rs_export_foreach.cpp b/slang_rs_export_foreach.cpp
index a4025ca..c928c54 100644
--- a/slang_rs_export_foreach.cpp
+++ b/slang_rs_export_foreach.cpp
@@ -246,7 +246,7 @@ RSExportForEach *RSExportForEach::Create(RSContext *Context,
clang::SourceLocation(),
&Ctx.Idents.get(Id));
- llvm::StringRef ParamName = PVD->getName();
+ // llvm::StringRef ParamName = PVD->getName();
clang::FieldDecl *FD =
clang::FieldDecl::Create(Ctx,
RD,
参考网址:
没有评论:
发表评论