[FAQ] Build Android on Snow Leopard

Posted by admin on May 10, 2010 in Android |

如需转载,请注明出处!
WebSite: http://www.jjos.org/
作者: 姜江 linuxemacs@gmail.com
QQ: 457283

这里记录一下在Mac OS 10.6.x上编译Android时碰到的一些问题

所需要的环境

1. 安装xcode,并且选择并安装10.4 SDK compatibility option

2.  设置可打开文件句柄为1024

加入.bashrc

ulimit -S -n 1024

找不到stdarg.h

错误消息如下:


============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.1-update1
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=darwin
HOST_BUILD_TYPE=release
BUILD_ID=ECLAIR
============================================
host C++: emulator-elff <= external/qemu/elff/dwarf_cu.cc
In file included from external/qemu/qemu-common.h:15,
from external/qemu/elff/elf.h:22,
from external/qemu/elff/elf_defs.h:20,
from external/qemu/elff/dwarf_defs.h:22,
from external/qemu/elff/dwarf_die.h:20,
from external/qemu/elff/elf_file.h:20,
from external/qemu/elff/dwarf_cu.cc:20:
/Developer/SDKs/MacOSX10.4u.sdk/usr/include/stdarg.h:4:25: error: stdarg.h: No such file or directory
In file included from external/qemu/elff/dwarf_die.h:21,
from external/qemu/elff/elf_file.h:20,
from external/qemu/elff/dwarf_cu.cc:20:
external/qemu/elff/elf_alloc.h: In static member function ‘static void* DwarfAllocBase::operator new(size_t)’:
external/qemu/elff/elf_alloc.h:156: warning: ‘operator new’ must not return NULL unless it is declared ‘throw()’ (or -fcheck-new is in effect)
make: *** [out/host/darwin-x86/obj/STATIC_LIBRARIES/emulator-elff_intermediates/elff/dwarf_cu.o] Error 1

解决办法


diff --git a/Makefile.android b/Makefile.android
index 0773e39..ee90ea4 100644
--- a/Makefile.android
+++ b/Makefile.android
@@ -49,7 +49,7 @@ ifeq ($(HOST_ARCH),ppc)
endif

ifeq ($(HOST_OS),darwin)
-    MY_CFLAGS += -mdynamic-no-pic
+    MY_CFLAGS += -mdynamic-no-pic  -I /Developer/usr/lib/gcc/i686-apple-darwin10/4.0.1/include/

# When building on Leopard or above, we need to use the 10.4 SDK
# or the generated binary will not run on Tiger.

编译libacc失败,提示类型转换错误


============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.1-update1
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=darwin
HOST_BUILD_TYPE=release
BUILD_ID=ECLAIR
============================================
host C++: libacc <= system/core/libacc/acc.cpp
system/core/libacc/acc.cpp: In member function ‘bool acc::Compiler::acceptStringLiteral()’:
system/core/libacc/acc.cpp:4557: error: cast from ‘char*’ to ‘int’ loses precision
system/core/libacc/acc.cpp: In member function ‘void acc::Compiler::unary()’:
system/core/libacc/acc.cpp:4637: error: cast from ‘char*’ to ‘int’ loses precision
system/core/libacc/acc.cpp:4643: error: cast from ‘char*’ to ‘int’ loses precision
system/core/libacc/acc.cpp:4731: error: cast from ‘void*’ to ‘int’ loses precision
system/core/libacc/acc.cpp: In member function ‘void acc::Compiler::globalDeclarations()’:
system/core/libacc/acc.cpp:5740: error: cast from ‘void*’ to ‘int’ loses precision
make: *** [out/host/darwin-x86/obj/SHARED_LIBRARIES/libacc_intermediates/acc.o] Error 1

解决方法


diff --git a/core/config.mk b/core/config.mk
index 72b11b9..6470484 100644
--- a/core/config.mk
+++ b/core/config.mk
@@ -297,6 +297,11 @@ TARGET_GLOBAL_CPPFLAGS += $(TARGET_RELEASE_CPPFLAGS)

PREBUILT_IS_PRESENT := $(if $(wildcard prebuilt/Android.mk),true)

+ifeq ($(HOST_OS),darwin)
+HOST_GLOBAL_CFLAGS += -arch i386
+HOST_GLOBAL_CPPFLAGS += -arch i386
+HOST_GLOBAL_LDFLAGS += -arch i386
+endif

# ###############################################################
# Collect a list of the SDK versions that we could compile against

构建acp错误


host C: acp <= build/tools/acp/acp.c
host C++: libhost <= build/libs/host/pseudolocalize.cpp
host C: libhost <= build/libs/host/CopyFile.c
build/libs/host/CopyFile.c: In function ‘copyFileContents’:
build/libs/host/CopyFile.c:124: warning: format ‘%d’ expects type ‘int’, but argument 4 has type ‘ssize_t’
build/libs/host/CopyFile.c:124: warning: format ‘%d’ expects type ‘int’, but argument 5 has type ‘ssize_t’
host StaticLib: libhost (out/host/darwin-x86/obj/STATIC_LIBRARIES/libhost_intermediates/libhost.a)
ar crs  out/host/darwin-x86/obj/STATIC_LIBRARIES/libhost_intermediates/libhost.a out/host/darwin-x86/obj/STATIC_LIBRARIES/libhost_intermediates/pseudolocalize.o out/host/darwin-x86/obj/STATIC_LIBRARIES/libhost_intermediates/CopyFile.o
host Executable: acp (out/host/darwin-x86/obj/EXECUTABLES/acp_intermediates/acp)
ld: warning: in out/host/darwin-x86/obj/EXECUTABLES/acp_intermediates/acp.o, file is not of required architecture
ld: warning: in out/host/darwin-x86/obj/STATIC_LIBRARIES/libhost_intermediates/libhost.a, file is not of required architecture
Undefined symbols:
"_main", referenced from:
start in crt1.10.6.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [out/host/darwin-x86/obj/EXECUTABLES/acp_intermediates/acp] Error 1

解决方法


diff --git a/core/combo/darwin-x86.mk b/core/combo/darwin-x86.mk
index 2150960..25372e2 100644
--- a/core/combo/darwin-x86.mk
+++ b/core/combo/darwin-x86.mk
@@ -65,6 +65,9 @@ define transform-host-o-to-shared-lib-inner
$(HOST_CXX) \
-dynamiclib -single_module -read_only_relocs suppress \
$(HOST_GLOBAL_LD_DIRS) \
+                 $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
+                 $(HOST_GLOBAL_LDFLAGS) \
+                 ) \
$(PRIVATE_ALL_OBJECTS) \
$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
@@ -81,6 +84,9 @@ $(HOST_CXX) \
-Wl,-dynamic -headerpad_max_install_names \
$(HOST_GLOBAL_LD_DIRS) \
$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
+                 $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
+                 $(HOST_GLOBAL_LDFLAGS) \
+                 ) \
$(PRIVATE_ALL_OBJECTS) \
$(PRIVATE_LDLIBS) \
$(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \

其他参考

[1] http://www.quietlycoding.com/?p=1

[2] http://d.hatena.ne.jp/bs-android/20090914

[3] http://blog.23corner.com/2010/04/20/building-android-on-mac-os-x-10-6/

[4] http://source.android.com/download#TOC-Mac-OS

内核编译时,提示找不到elf.h文件

1. sudo port install libelf
2. sudo ln -s /opt/local/include/libelf /usr/include/libelf
3. copy elf.h to /usr/include

#include

/* Intel 80386 specific definitions.  */

/* i386 relocs.  */

#define R_386_NONE         0            /* No reloc */
#define R_386_32           1            /* Direct 32 bit  */
#define R_386_PC32         2            /* PC relative 32 bit */
#define R_386_GOT32        3            /* 32 bit GOT entry */
#define R_386_PLT32        4            /* 32 bit PLT address */
#define R_386_COPY         5            /* Copy symbol at runtime */
#define R_386_GLOB_DAT     6            /* Create GOT entry */
#define R_386_JMP_SLOT     7            /* Create PLT entry */
#define R_386_RELATIVE     8            /* Adjust by program base */
#define R_386_GOTOFF       9            /* 32 bit offset to GOT */
#define R_386_GOTPC        10           /* 32 bit PC relative offset to GOT */
#define R_386_32PLT        11
#define R_386_TLS_TPOFF    14           /* Offset in static TLS block */
#define R_386_TLS_IE       15           /* Address of GOT entry for static TLS
block offset */
#define R_386_TLS_GOTIE    16           /* GOT entry for static TLS block
offset */
#define R_386_TLS_LE       17           /* Offset relative to static TLS
block */
#define R_386_TLS_GD       18           /* Direct 32 bit for GNU version of
general dynamic thread local data */
#define R_386_TLS_LDM      19           /* Direct 32 bit for GNU version of
local dynamic thread local data
in LE code */
#define R_386_16           20
#define R_386_PC16         21
#define R_386_8            22
#define R_386_PC8          23
#define R_386_TLS_GD_32    24           /* Direct 32 bit for general dynamic
thread local data */
#define R_386_TLS_GD_PUSH  25           /* Tag for pushl in GD TLS code */
#define R_386_TLS_GD_CALL  26           /* Relocation for call to
__tls_get_addr() */
#define R_386_TLS_GD_POP   27           /* Tag for popl in GD TLS code */
#define R_386_TLS_LDM_32   28           /* Direct 32 bit for local dynamic
thread local data in LE code */
#define R_386_TLS_LDM_PUSH 29           /* Tag for pushl in LDM TLS code */
#define R_386_TLS_LDM_CALL 30           /* Relocation for call to
__tls_get_addr() in LDM code */
#define R_386_TLS_LDM_POP  31           /* Tag for popl in LDM TLS code */
#define R_386_TLS_LDO_32   32           /* Offset relative to TLS block */
#define R_386_TLS_IE_32    33           /* GOT entry for negated static TLS
block offset */
#define R_386_TLS_LE_32    34           /* Negated offset relative to static
TLS block */
#define R_386_TLS_DTPMOD32 35           /* ID of module containing symbol */
#define R_386_TLS_DTPOFF32 36           /* Offset in TLS block */
#define R_386_TLS_TPOFF32  37           /* Negated offset in static TLS block */
/* Keep this the last entry.  */
#define R_386_NUM          38

/* ARM relocs.  */
#define R_ARM_NONE              0       /* No reloc */
#define R_ARM_PC24              1       /* PC relative 26 bit branch */
#define R_ARM_ABS32             2       /* Direct 32 bit  */
#define R_ARM_REL32             3       /* PC relative 32 bit */
#define R_ARM_PC13              4
#define R_ARM_ABS16             5       /* Direct 16 bit */
#define R_ARM_ABS12             6       /* Direct 12 bit */
#define R_ARM_THM_ABS5          7
#define R_ARM_ABS8              8       /* Direct 8 bit */
#define R_ARM_SBREL32           9
#define R_ARM_THM_PC22          10
#define R_ARM_THM_PC8           11
#define R_ARM_AMP_VCALL9        12
#define R_ARM_SWI24             13
#define R_ARM_THM_SWI8          14
#define R_ARM_XPC25             15
#define R_ARM_THM_XPC22         16
#define R_ARM_COPY              20      /* Copy symbol at runtime */
#define R_ARM_GLOB_DAT          21      /* Create GOT entry */
#define R_ARM_JUMP_SLOT         22      /* Create PLT entry */
#define R_ARM_RELATIVE          23      /* Adjust by program base */
#define R_ARM_GOTOFF            24      /* 32 bit offset to GOT */
#define R_ARM_GOTPC             25      /* 32 bit PC relative offset to GOT */
#define R_ARM_GOT32             26      /* 32 bit GOT entry */
#define R_ARM_PLT32             27      /* 32 bit PLT address */
#define R_ARM_ALU_PCREL_7_0     32
#define R_ARM_ALU_PCREL_15_8    33
#define R_ARM_ALU_PCREL_23_15   34
#define R_ARM_LDR_SBREL_11_0    35
#define R_ARM_ALU_SBREL_19_12   36
#define R_ARM_ALU_SBREL_27_20   37
#define R_ARM_GNU_VTENTRY       100
#define R_ARM_GNU_VTINHERIT     101
#define R_ARM_THM_PC11          102     /* thumb unconditional branch */
#define R_ARM_THM_PC9           103     /* thumb conditional branch */
#define R_ARM_RXPC25            249
#define R_ARM_RSBREL32          250
#define R_ARM_THM_RPC22         251
#define R_ARM_RREL32            252
#define R_ARM_RABS22            253
#define R_ARM_RPC24             254
#define R_ARM_RBASE             255
/* Keep this the last entry.  */
#define R_ARM_NUM               256

/* MIPS relocs.  */

#define R_MIPS_NONE             0       /* No reloc */
#define R_MIPS_16               1       /* Direct 16 bit */
#define R_MIPS_32               2       /* Direct 32 bit */
#define R_MIPS_REL32            3       /* PC relative 32 bit */
#define R_MIPS_26               4       /* Direct 26 bit shifted */
#define R_MIPS_HI16             5       /* High 16 bit */
#define R_MIPS_LO16             6       /* Low 16 bit */
#define R_MIPS_GPREL16          7       /* GP relative 16 bit */
#define R_MIPS_LITERAL          8       /* 16 bit literal entry */
#define R_MIPS_GOT16            9       /* 16 bit GOT entry */
#define R_MIPS_PC16             10      /* PC relative 16 bit */
#define R_MIPS_CALL16           11      /* 16 bit GOT entry for function */
#define R_MIPS_GPREL32          12      /* GP relative 32 bit */

#define R_MIPS_SHIFT5           16
#define R_MIPS_SHIFT6           17
#define R_MIPS_64               18
#define R_MIPS_GOT_DISP         19
#define R_MIPS_GOT_PAGE         20
#define R_MIPS_GOT_OFST         21
#define R_MIPS_GOT_HI16         22
#define R_MIPS_GOT_LO16         23
#define R_MIPS_SUB              24
#define R_MIPS_INSERT_A         25
#define R_MIPS_INSERT_B         26
#define R_MIPS_DELETE           27
#define R_MIPS_HIGHER           28
#define R_MIPS_HIGHEST          29
#define R_MIPS_CALL_HI16        30
#define R_MIPS_CALL_LO16        31
#define R_MIPS_SCN_DISP         32
#define R_MIPS_REL16            33
#define R_MIPS_ADD_IMMEDIATE    34
#define R_MIPS_PJUMP            35
#define R_MIPS_RELGOT           36
#define R_MIPS_JALR             37
#define R_MIPS_TLS_DTPMOD32     38      /* Module number 32 bit */
#define R_MIPS_TLS_DTPREL32     39      /* Module-relative offset 32 bit */
#define R_MIPS_TLS_DTPMOD64     40      /* Module number 64 bit */
#define R_MIPS_TLS_DTPREL64     41      /* Module-relative offset 64 bit */
#define R_MIPS_TLS_GD           42      /* 16 bit GOT offset for GD */
#define R_MIPS_TLS_LDM          43      /* 16 bit GOT offset for LDM */
#define R_MIPS_TLS_DTPREL_HI16  44      /* Module-relative offset, high 16 bits */
#define R_MIPS_TLS_DTPREL_LO16  45      /* Module-relative offset, low 16 bits */
#define R_MIPS_TLS_GOTTPREL     46      /* 16 bit GOT offset for IE */
#define R_MIPS_TLS_TPREL32      47      /* TP-relative offset, 32 bit */
#define R_MIPS_TLS_TPREL64      48      /* TP-relative offset, 64 bit */
#define R_MIPS_TLS_TPREL_HI16   49      /* TP-relative offset, high 16 bits */
#define R_MIPS_TLS_TPREL_LO16   50      /* TP-relative offset, low 16 bits */
#define R_MIPS_GLOB_DAT         51
/* Keep this the last entry.  */
#define R_MIPS_NUM              52

~~~ 待续 ~~~


Post Footer automatically generated by wp-posturl plugin for wordpress.

Tags:

9 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Copyright © 2010-2011 Jelly's Blog All rights reserved.
Desk Mess Mirrored version 1.9 theme from BuyNowShop.com.

Jelly's Blocnzz&51la for wordpress,cnzz for wordpress,51la for wordpress