使用NDK的android交叉编译失败,编译错误

时间:2011-06-16 21:07:50

标签: android android-ndk cross-compiling

我正在编译一个来自源代码的nexus安卓内核,如HTCs developer website所示。我通过DLing来自android开发站点的android NDK获得了一个ARM工具链。我可以运行make clean并在没有发生事故的情况下进行defconfig,但是当我运行make时,它只会在遇到编译错误之前得到这样的好处。

目前我看到以下内容:

  

$ MY_DIR / nexus_one / arch / arm / include / asm / glue.h:156:29:错误:'#'后面没有宏参数

违规行是:

1  /*
2  * Instruction Fault Status Register.  (New register as of ARMv6)
3  * If processor has IFSR then set value, else set translation fault
4  */
5 #if defined(CONFIG_CPU_ABRT_EV7) || defined(CONFIG_CPU_ABRT_EV6)
6 # define CPU_PABORT_IFSR(reg)    mrc p15, 0, reg, cr5, cr0, 1         @asm macro;
7 #else
8 # define CPU_PABORT_IFSR(reg)    mov reg, #5                          @asm macro;
9 #endif

具体来说,上面第8行是编译器的主要内容。显然你不能拥有第二个#符号,但我不确定这个代码中是什么,它看起来非常重要,所以我不想触摸它。

我猜我正在使用错误的工具链进行编译?或许我以某种方式错误地配置了错误?有没有人知道这是什么意思?

感谢, 布赖恩

2 个答案:

答案 0 :(得分:1)

我强烈建议您使用CodeSourcery工具链来编译Linux内核。

答案 1 :(得分:1)

原来这与特定的工具链无关。 #符号需要某种“转义”。解决方案如下:

/* this is needed to get the mov reg, 5 macro to compile and function correctly */
#define hash_hackery #
#define f(x) x

#if defined(CONFIG_CPU_ABRT_EV7) || defined(CONFIG_CPU_ABRT_EV6)
# define CPU_PABORT_IFSR(reg)   mrc p15, 0, reg, cr5, cr0, 1         @asm macro;
#else
# define CPU_PABORT_IFSR(reg)   mov reg, f(hash_hackery)5            @asm macro;
#endif

This post在找到答案时非常有用。