从源代码构建Android:不支持的reloc 43

时间:2016-03-16 22:42:29

标签: android makefile android-source

当我编译Android 5.1.1时,我收到了许多这样的错误:

...
...
...
libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43
libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43
libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43
libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43

并且make过程最终失败:

clang: error: linker command failed with exit code 1 (use -v to see invocation)
build/core/host_shared_library_internal.mk:44: recipe for target 'out/host/linux-x86/obj32/lib/libnativehelper.so' failed
make: *** [out/host/linux-x86/obj32/lib/libnativehelper.so] Error 1

我尝试使用和不使用clang以及使用不同版本的clang来构建源代码。但是在新的分支上,clang是一种要求,如果没有它,make就无法启动。

可能出现什么问题?

5 个答案:

答案 0 :(得分:24)

应该应用此补丁来使事情正常工作https://android-review.googlesource.com/#/c/223100/

在Android源代码目录中打开build/core/clang/HOST_x86_common.mk文件,并使用一些编辑器添加这些行,如link

中所述

对于Android Lollipop或任何早期版本,请确保在应用此修补程序时保留-no-integrated-as。确保线条连续是正确的(\在除最后一行之外的每一行的末尾。)

但是,在Marshmallow中删除了-no-integrated-as

答案 1 :(得分:24)

对我有用:
在文件/art/build/Android.common_build.mk中,找出:

# Host.
ART_HOST_CLANG := false
ifneq ($(WITHOUT_HOST_CLANG),true)
  # By default, host builds use clang for better warnings.
  ART_HOST_CLANG := true
endif

更改为:

# Host.
ART_HOST_CLANG := false
ifeq ($(WITHOUT_HOST_CLANG),false)
  # By default, host builds use clang for better warnings.
  ART_HOST_CLANG := true
endif

如果仍然无效,请在Android根路径中尝试: cp /usr/bin/ld.gold prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld

答案 2 :(得分:4)

问题来自于binutils的不兼容变化:添加了一些部分。一些构建平台有新的binutils和android构建树有旧的。该错误来自clang调用变量定义。这些并不告诉clang使用提供的构建链。然后clang使用本机构建平台binutils(这里是/ usr / bin /而不是提供的预构建)。然后修复意味着应用mysticTot指向的补丁,然后删除工具链产生的所有二进制文件(根据错误出现的位置,这可能会改变,但删除所有STATIC_LIBRARIES / SHARED_LIBRARIES / EXECUTABLES等dirs应该这样做)。同时删除ccache缓存(因为它存储.o)然后重建。 由Ov3r1oad提供的修复包括用原生ld替换预构建的工具链ld不是解决方案,只是一种解决方法并且可能是危险的(混合部分编号不好)。 希望它会有所帮助。

答案 3 :(得分:3)

作为一种强硬的解决方法,我只是用/usr/bin/ld.gold上的软链接替换了预构建的链接器。 它在这里描述:https://bbs.archlinux.org/viewtopic.php?id=209698

答案 4 :(得分:2)

您是在Arch Linux上构建的吗?我今天遇到同样的问题。我以前的版本是在3天前完成的,一切都很好。今天都失败了。

我看到管理员2天前升级了一些软件包,尤其是这些

[2016-03-16 15:29] [ALPM] upgraded glibc (2.22-3 -> 2.23-1)
[2016-03-16 15:29] [ALPM] upgraded lib32-glibc (2.22-3.1 -> 2.23-1)
[2016-03-16 15:29] [ALPM] upgraded lib32-gcc-libs (5.3.0-3 -> 5.3.0-5)
[2016-03-16 15:29] [ALPM] upgraded gcc-libs-multilib (5.3.0-3 -> 5.3.0-5)
[2016-03-16 15:29] [ALPM] upgraded libcap (2.24-2 -> 2.25-1)
[2016-03-16 15:29] [ALPM] upgraded binutils (2.25.1-3 -> 2.26-3)
[2016-03-16 15:29] [ALPM] upgraded gcc-multilib (5.3.0-3 -> 5.3.0-5)
[2016-03-16 15:29] [ALPM] upgraded libcups (2.1.2-3 -> 2.1.3-1)

binutils可能是罪魁祸首? (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=808206

另见https://groups.google.com/d/msg/android-x86/U1XpL0tUpqw/y4W3wRCdJgAJ ...