【错误笔记】error: only position independent executables (PIE) are supported.错误解决

一、问题描述

使用 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 ——

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,这个问题通常是由于缺少必要的编译工具或环境变量设置不正确引起的。为了解决这个问题,我们需要进行以下步骤: 1. 检查编译工具是否已经安装 首先,我们需要检查系统上是否安装了必要的编译工具,例如gcc、make等。可以使用以下命令检查它们是否已经安装: ``` which gcc which make ``` 如果这些命令没有输出路径,则说明它们未安装或者没有在PATH环境变量中设置。在这种情况下,我们需要安装这些工具。对于Debian/Ubuntu等基于apt的发行版,可以使用以下命令安装: ``` sudo apt-get update sudo apt-get install build-essential ``` 2. 检查环境变量设置是否正确 如果已经安装了必要的编译工具,但是仍然遇到了这个错误,那么可能是环境变量设置不正确导致的。我们需要检查以下环境变量是否设置正确: - PATH:包含编译工具所在的路径 - LD_LIBRARY_PATH:包含库文件所在的路径 - C_INCLUDE_PATH:包含头文件所在的路径 可以使用以下命令检查它们的值是否正确: ``` echo $PATH echo $LD_LIBRARY_PATH echo $C_INCLUDE_PATH ``` 如果这些变量没有正确设置,我们需要手动设置它们。例如,对于bash shell,可以将以下命令添加到.bashrc文件中: ``` export PATH=$PATH:/usr/local/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/include ``` 3. 检查config.log文件 如果上述步骤都没有解决问题,我们需要查看config.log文件来获取更详细的错误信息。可以使用以下命令查看config.log文件: ``` less /home/farsight/farsight/feng/day8/jpeg-9e/config.log ``` 在config.log文件中,可以查找类似于“error: C compiler cannot create executables”的错误信息,并查看更详细的错误描述。根据错误描述,我们可以进行进一步的排查和修复。 希望这些步骤可以帮助你解决问题!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值