我正在尝试构建我的本机代码,以便在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中):
.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
感谢您提供的任何帮助
答案 0 :(得分:1)
-fPIC
当然对手写汇编代码没有影响,它是C编译器指示它生成位置无关代码的标志。在这种情况下,您是编译器,因此您必须自己编写PIC。幸运的是,x86-64通过提供新的RIP相对寻址模式来帮助您。因此,您只需将lea rcx,myprivatedata
替换为lea rcx,[rip+myprivatedata]
。