看到了一篇关于Android上利用终端来使用gcc编译C/C++源程序的文章,我感到无比兴奋,所以立刻将我自己的安装过程记下来。那个后记也很有用的。

gcc编译源代码需要创建临时文件,而gcc又只能安装在手机内存中使用(因为需要755权限),因此必须使用root来调用它。

测试手机:xiaomi note

1、下载gcc plugin for C4Droid https://www.cr173.com/soft/757968.html,解压其中的gcc文件夹出来,里面有基本的编译工具。如果要使用Qt,则将qt文件夹中的gcc和上述gcc文件夹合并即可。

2、将gcc文件夹复制到/system或/data文件夹中,但不能是/dev或/cache中。如果为了美观,也可以将gcc文件夹的权限改为755。假设安装到了/system中。

3、在gcc根目录下创建一个用于修改文件权限的脚本chgmod.sh,内容:

echo 1..
chmod 755 ./bin/*
chmod 755 ./arm-linux-androideabi/bin/*
chmod 755 ./libexec/gcc/arm-linux-androideabi/4.7.1/*
echo 2..

4、再创建一个用于设置gcc环境变量的脚本setgcc.sh,内容:

echo 1..
export GCCHOME=/data/gcc
export GCCPATH=$GCCHOME/bin:$GCCHOME/arm-linux-androideabi/bin:$GCCHOME/libexec
export PATH=$PATH:$GCCHOME:$GCCPATH
echo 2..
su
echo 3..

5、修改以上文件属性为755。

6、尝试先写一个源程序test.c,内容:

#include <stdio.h>

int main(void)
{
  printf("success\n");
  return 0;
}

7、安装Android上的终端程序,我用的是BTEP。

8、在终端中输入命令(顺序不可变),获取root权限:

su

切换目录:

cd /system/gcc

执行脚本,修改权限(只需运行一次,以后可跳过):

./chgmod.sh

设置gcc环境变量:

./setgcc.sh

这个脚本执行后将会再次进入su,为的是使export设置的变量继续生效。退出后会有提示。

如果终端没有报错,则继续,否则检查脚本内容里的目录是否正确。

9、输入:

gcc -Wall -o test test.c

如果终端报错,回到本文开头重新看过,看看是本文错了还是自己写错脚本了;

如果gcc报错,不关我的事,戴上眼镜看看源程序是不是错了。

待gcc输出一大包字符后,完成编译。

10、输入:

./test

error: only position independent executables (PIE) are supported.

需要采用pie编译

LOCAL_CFLAGS += -pie -fPIE

LOCAL_LDFLAGS += -pie -fPIE

如:gcc -Wall -pie -fPIE -o test test.c


后记:

写了一大包,不就是写如何设置环境变量和保持变量效果的问题嘛!有一个更好的方法,就是直接修改手机根目录下的init.rc文件:

1、用RE的编辑器编辑init.rc,在此之前最好备份。

2、找到有一大堆export的那部分,在那部分的最后添加:

export GCCHOME=/data/gcc
export GCCPATH=$GCCHOME/bin:$GCCHOME/arm-linux-androideabi/bin:$GCCHOME/libexec
export PATH=$PATH:$GCCHOME:$GCCPATH

3、保存退出,出现错误 Read-only file system, 使用命令mount -o remount,rw / 修改init.environ.rc,在最后添加环境数据,修改并保存再umount /

android 安装gcc环境的更多相关文章

  1. Windows下安装gcc环境

    安装GCC环境 https://gcc.gnu.org/ 点进去后 然后 然后 点击 再点击 点击 (啊,这是跳了多少个页面) 开始下载了.完成之后打开:(自动执行的) 弹出 点击OK,弹出个窗口,让 ...

  2. windows上安装gcc/g++环境(MinGW,msys64等)

    1 前言 经过折腾安装gcc环境,记录一下 2 工具  MinGW安装器: 下载地址1:MinGW官网 下载地址2:SourceForge (MinGW w64) 下载地址3:win-builds-1 ...

  3. mac下安装libpng环境

    用go写一个爬虫工具时需要使用一个go的库,而这个库有需要使用libpng库,不然编译就会提示说 png.h找不到等之类的信息,于是想到应该和windows一样需要安装gcc环境,然后让gcc里安装l ...

  4. CentOS离线安装GCC编译环境

    gcc编译环境rpm下载 安装相关的rpm包,具体版本可能随时间变化而变化,可以去以下地址下载: 重庆大学镜像:http://b.mirrors.lanunion.org/CentOS/中国科学技术大 ...

  5. C语言的编译过程、安装gcc编译器以及设置环境变量

    以我对C语言编译过程的了解,我用了一点时间画了一个图,提供给大家参考一下,希望有些能对您的问题提上帮助. 前几天刚初步学习了C语言的编译过程,感触挺深的.在C语言中头文件其实起了一个很大的作用. 1. ...

  6. Android笔记——Windows环境下Android Studio v1.0安装教程

    本文主要讲解Windows环境下Android Studio的安装教程,Mac的Android Studio安装与此类似不在赘述,另外友情提示Windows下的SDK与Mac的SDK是通用的,可以直接 ...

  7. java Android SDK安装与环境变量配置以及开发第一个Android程序

    JAVA的安装与环境变量的配置 1.先下载JAVA,并且安装. 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u3 ...

  8. 安装gcc及开发环境

    安装gcc及开发环境================================> 安装gcc:     * apt-get install build-essential    * gcc ...

  9. android studio 安装与环境搭建

    转摘自:http://blog.csdn.net/zhanghefu/article/details/9286123 第一章   andriod studio 安装与环境搭建 一.Android St ...

随机推荐

  1. Exponential family of distributions

    目录 定义 性质 极大似然估计 最大熵 例子 Bernoulli 指数分布 正态分布 Choi H. I. Lecture 4: Exponential family of distributions ...

  2. Improved Variational Inference with Inverse Autoregressive Flow

    目录 概 主要内容 代码 Kingma D., Salimans T., Jozefowicz R., Chen X., Sutskever I. and Welling M. Improved Va ...

  3. CS5263|DP转HDMI转换器芯片|CS5263芯片说明

    CS5263是一款高性能DP1.4到HDMI2.0b功能芯片,设计用于将DP1.4源连接到HDMI2.0b接收器.CS5263集成了DP1.4兼容接收机和HDMI2.0b兼容接收机发射器.DP接口包括 ...

  4. 排列组合 "n个球放入m个盒子m"问题 总结

    求,盒子都可以分成是否不能区分,和能区分,还能分成是否能有空箱子,所以一共是8种情况,我们现在来一一讨论. 1.球同,盒不同,无空箱 C(n-1,m-1), n>=m0, n<m 使用插板 ...

  5. Zookeeper基础教程(五):C#实现Zookeeper分布式锁

    分布式锁 互联网初期,我们系统一般都是单点部署,也就是在一台服务器完成系统的部署,后期随着用户量的增加,服务器的压力也越来越大,响应速度越来越慢,甚至出现服务器崩溃的情况. 为解决服务器压力太大,响应 ...

  6. 【PowerShell】ASCII与Char之间的转换

    1 [char[]][int[]]$char=65..90 2 $char -join ',' 3 [int[]][char[]]$ascii=$char 4 $ascii -join ',' A,B ...

  7. Java数据类型 long 与 Long 的区别 和 正确用法

    1.区别 (1) long  是 基本类型  [类似于 int] Long 是 对象类型  [类似于Integer] (2) long 默认值是 0 Long 默认值是 null 2.比较方法 (1) ...

  8. spring cloud --- Zuul --- 心得

    spring boot      1.5.9.RELEASE spring cloud    Dalston.SR1 1.前言 什么是 Zuul? Zuul是微服务网关,与Gateway类似 ,根据请 ...

  9. systemd学习及使用

    什么是systemd? (译)systemd是linux系统的一组基础构件块.它提供了一个系统和服务的管理,它以PID 1 的形式运行并启动系统的其余部分.systemd 使用积极的并行化功能,使用s ...

  10. Go语言命名规范

    一.变量命名规范 变量命名一般采用驼峰式,当遇到特有名词(缩写或简称,如DNS)的时候,特有名词根据是否私有全部大写或小写.例子: var apiClient var URLString 二.常量命名 ...