android 安装gcc环境
看到了一篇关于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环境的更多相关文章
- Windows下安装gcc环境
安装GCC环境 https://gcc.gnu.org/ 点进去后 然后 然后 点击 再点击 点击 (啊,这是跳了多少个页面) 开始下载了.完成之后打开:(自动执行的) 弹出 点击OK,弹出个窗口,让 ...
- windows上安装gcc/g++环境(MinGW,msys64等)
1 前言 经过折腾安装gcc环境,记录一下 2 工具 MinGW安装器: 下载地址1:MinGW官网 下载地址2:SourceForge (MinGW w64) 下载地址3:win-builds-1 ...
- mac下安装libpng环境
用go写一个爬虫工具时需要使用一个go的库,而这个库有需要使用libpng库,不然编译就会提示说 png.h找不到等之类的信息,于是想到应该和windows一样需要安装gcc环境,然后让gcc里安装l ...
- CentOS离线安装GCC编译环境
gcc编译环境rpm下载 安装相关的rpm包,具体版本可能随时间变化而变化,可以去以下地址下载: 重庆大学镜像:http://b.mirrors.lanunion.org/CentOS/中国科学技术大 ...
- C语言的编译过程、安装gcc编译器以及设置环境变量
以我对C语言编译过程的了解,我用了一点时间画了一个图,提供给大家参考一下,希望有些能对您的问题提上帮助. 前几天刚初步学习了C语言的编译过程,感触挺深的.在C语言中头文件其实起了一个很大的作用. 1. ...
- Android笔记——Windows环境下Android Studio v1.0安装教程
本文主要讲解Windows环境下Android Studio的安装教程,Mac的Android Studio安装与此类似不在赘述,另外友情提示Windows下的SDK与Mac的SDK是通用的,可以直接 ...
- java Android SDK安装与环境变量配置以及开发第一个Android程序
JAVA的安装与环境变量的配置 1.先下载JAVA,并且安装. 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u3 ...
- 安装gcc及开发环境
安装gcc及开发环境================================> 安装gcc: * apt-get install build-essential * gcc ...
- android studio 安装与环境搭建
转摘自:http://blog.csdn.net/zhanghefu/article/details/9286123 第一章 andriod studio 安装与环境搭建 一.Android St ...
随机推荐
- EXPLAINING AND HARNESSING ADVERSARIAL EXAMPLES
目录 概 主要内容 从线性谈起 非线性 Goodfellow I, Shlens J, Szegedy C, et al. Explaining and Harnessing Adversarial ...
- [C++]C++四舍五入保留到n位小数
#include <sstream> #include <iostream> #include <iomanip> using namespace std; /** ...
- Capstone CS5268DEMOBOARD原理图|TYPEC转HDMI+VGA+PD3.0+USB3.0扩展坞方案
Capstone CS5268DEMOBOARD原理图|TYPEC转HDMI+VGA+PD3.0+USB3.0四合一设计参考 CS5268 是typec转HDMI+VGA+pd3.0+U3四合一拓展坞 ...
- Android物联网应用程序开发(智慧园区)—— 设置传感器阈值对话框界面
效果图: 自定义对话框布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xml ...
- HTML5 纯CSS3实现正方体旋转3D效果
实现效果: 实现代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...
- 编写Java程序_找星座朋友应用软件
一.About the Project 项目介绍 自古以来,人对于恒星的排列和形状很感兴趣,并很自然地把一些位置相近的星联系起来,组成星座.占星术亦称"占星学"."星占学 ...
- Java常用的几种设计模式
本来想写点spring相关的东西的,想来想去,先写点设计模式的东西吧 什么是设计模式?套用百度百科的话解释吧 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设 ...
- Git 标签使用详解
列出标签 # 默认按字母排序显示 $ git tag # 模糊匹配查找标签 $ git tag -l "v1.8.5*" 创建标签 # 创建附注标签 $ git tag -a v1 ...
- python 单下划线与双下划线的区别
来自为知笔记(Wiz)
- tomcat启动卡在了 At least one JAR was scanned for TLDs yet contained no TLDs 的根本原因与解决办法
1.前言 有时候服务器开启时启动不了,卡在了 org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned fo ...