一、问题描述
使用 NDK 编译程序,编译过程正常, adb push 到 android 运行时,出现此问题。
root@XXX_Device:/data/test # ./test
error: only position independent executables (PIE) are supported.
root@XXX_Device:/data/test #
二、问题分析
此问题与 android 版本升级,相关安全检测机制更新相关;
从 Android 4.1 开始引入 PIE 安全机制,并且从 Android 5.0 正式开启验证,非PIE方式编译的可执行程序无法运行。
三、解决方案
1. 编译语句添加pie选项解决
在 编译选项中,添加
-pie -fPIE
即可;
最简单的例子:
arm-linux-androideabi-gcc -pie -fPIE test.c -o output/test
2. 想办法绕过检测(此处不详述)
—— 2018-12-07 ——