Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用NDK对android进行交叉编译失败,出现编译器错误_Android_Android Ndk_Cross Compiling - Fatal编程技术网

使用NDK对android进行交叉编译失败,出现编译器错误

使用NDK对android进行交叉编译失败,出现编译器错误,android,android-ndk,cross-compiling,Android,Android Ndk,Cross Compiling,我正在编译一个NexusOne android内核,它的源代码可以在上找到。我从android开发网站上下载了一个ARM工具链。我可以毫无意外地运行makeclean和makedefconfig,但当我运行make时,在遇到编译器错误之前,它只会变得很糟糕 目前我看到以下情况: $MY_DIR/nexus_one/arch/arm/include/asm/glue.h:156:29:错误:“#”后面没有宏参数 令人不快的是: 1 /* 2 * Instruction Fault Status

我正在编译一个NexusOne android内核,它的源代码可以在上找到。我从android开发网站上下载了一个ARM工具链。我可以毫无意外地运行makeclean和makedefconfig,但当我运行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行是编译器的代码。显然,你不能有第二个符号,但我不确定这段代码是怎么回事,它看起来很重要,所以我不想碰它

我猜我是用错误的工具链编译的也许?或者也许我把东西配置错了?有人知道这是怎么回事吗

谢谢,
brian

我强烈建议您使用CodeSourcery toolchain for Linux来编译Linux内核


结果表明,这与特定的工具链无关。#标志需要某种形式的“逃逸”。解决办法如下:

/* 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

在找到答案时提供了非常丰富的信息。

fyi,我已经尝试了4种不同的工具链,因此我开始认为特定的交叉编译器不是问题所在。我不知道还有什么好看的。这是我第一次尝试的。我会再试一次,看看是否有什么不同。谢谢只是好奇;是什么让你特别推荐这个工具链呢?所以我以前从codesourcery尝试过一个类似但不同的工具链,现在在这两种情况下都看到了相同的错误(加上ndk工具链)。所以我想问题一定是别的。