Assembly NDK x86_64在尝试用x64汇编语言链接时出现reloc错误

Assembly NDK x86_64在尝试用x64汇编语言链接时出现reloc错误,assembly,android-ndk,x86-64,Assembly,Android Ndk,X86 64,我正试图构建我的本地代码,以Android 5.0中新的64位ABI为目标。我的32位代码(包括C和汇编语言)正确构建和链接。当我尝试将汇编语言添加到x86_64版本时,出现以下错误: E:/android/FIV_Free//obj/local/x86_64/objs/pil_lib/test.o: requires unsupported dynamic reloc 11; recompile with -fPIC 我尝试将“-fPIC”添加到编译标志中,但没有效果 以下是构建脚本: if

我正试图构建我的本地代码,以Android 5.0中新的64位ABI为目标。我的32位代码(包括C和汇编语言)正确构建和链接。当我尝试将汇编语言添加到x86_64版本时,出现以下错误:

E:/android/FIV_Free//obj/local/x86_64/objs/pil_lib/test.o: requires unsupported dynamic reloc 11; recompile with -fPIC
我尝试将“-fPIC”添加到编译标志中,但没有效果

以下是构建脚本:

ifeq ($(TARGET_ARCH_ABI),x86_64)
LOCAL_CFLAGS := -Wall -D_GCC_ANDROID=1
LOCAL_SRC_FILES := \
          pqv_jni.c \
          pil_io.c \
          pil.c \
          test.S \
endif
下面是一个简单的编译代码示例,但不会链接(在test.S中):


感谢您提供的任何帮助

-fPIC
当然对手工编写的汇编代码没有影响,它是C编译器指示它生成位置无关代码的标志。在这个场景中,您是编译器,所以您必须自己编写PIC。幸运的是,x86-64提供了一种新的RIP相对寻址模式,为您提供了帮助。因此,您只需将
learcx,myprivatedata
替换为
learcx,[rip+myprivatedata]

正确:)。谢谢多年来,我一直在Windows上编写x64 asm代码,但从未看到过以PIC格式编写的信息。
.intel_syntax noprefix
 .global myfunction

 .data
myprivatedata: .byte 0,1,2,3,4,5,6,7

 .text
myfunction:
  xor rax,rax
  lea rcx,myprivatedata
  mov al,[rcx]
  ret
 .end