问题原因
在android 4.4之后添加了新的保护机制,可执行文件必须是采用PIE编译的,即必须为地址无关代码.
解决方法
如果是使用ndk进行编译的(需要使用到Android.mk脚本),则在脚本中添加:
LOCAL_CFLAGS += -pie -fPIE
LOCAL_LDFLAGS += -pie -fPIE
如果是手动采用交叉编译链进行编译的,则在编译选项上添加-pie -fPIE
即可.
也就是说,可以采用xxx(编译器名) -o output xxx.c -pie -fPIE -sysroot=$SYSROOT的方式进行编译.