Android上通过gcc编译普通的C程序

1.编译可执行程序

1.1 通过mk脚本编译

目录结构:

mk_app
	jni
		main.c
		Android.mk

Android.mk内容十分满简单:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE:= main_exec
LOCAL_SRC_FILES := main.c

include $(BUILD_EXECUTABLE)

命令下,cd到jni的上一级目录,然后执行ndk-build命令:

E:\GitHub\ndk_tutorial\android_build_c_exec\mk_ap>ndk-build
[armeabi] Compile thumb  : main_exec <= main.c
[armeabi] Executable     : main_exec
[armeabi] Install        : main_exec => libs/armeabi/main_exec

在jni同级目录下, libs/armeabi/下生成可执行程序main_exec

1.2 通过android ndk提供的arm-linux-androideabi-gcc.exe工具编译

目录结构:

gcc_app
	main.c

命令行,cd到gcc_app目录下,然后执行下面命令:

D:\android-ndk-r9b-windows-x86\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\bin\arm-linux-androideabi-gcc.exe --sysroot=D:\android-ndk-r9b-windows-x86\platforms\android-13\arch-arm -o main_exec main.c

在当前目录下生成main_exec可执行程序。

--sysroot是执行系统的include和lib目录,去掉会报一堆定义找不到错误。具体可以gcc --help查看。

2.adb将main_exec拷贝到手机上执行

具体操作如下:

E:\GitHub\ndk_tutorial\android_build_c_exec\gcc_app>adb push main_exec /sdcard/
1528 KB/s (6260 bytes in 0.004s)

E:\GitHub\ndk_tutorial\android_build_c_exec\gcc_app>adb shell
[email protected]:/ $ cp /sdcard/main_exec /data/local/
cp /sdcard/main_exec /data/local/
cp: /data/local/main_exec: Permission denied
1|[email protected]:/ $ cp /sdcard/main_exec /data/local/tmp
cp /sdcard/main_exec /data/local/tmp
[email protected]:/ $ cd /data/local/
cd /data/local/
[email protected]:/data/local $ cd tmp
cd tmp
[email protected]:/data/local/tmp $ ls -l main_exec
ls -l main_exec
-rwxr-x--x shell    shell        6260 2014-06-06 16:30 main_exec
[email protected]:/data/local/tmp $ chmod 751 main_exec
chmod 751 main_exec
[email protected]:/data/local/tmp $ ./main_exec
./main_exec
hello world

通过adb push到sdcard上,然后进入shell模式,从sdcard复制到/data/local/tmp 下(注意我的n4手机上/data/local下权限不够,进入tmp可以)。

chmod 751 设置可执行程序权限,然后执行。!。

3.参考

1. http://stackoverflow.com/questions/21424366/how-to-use-arm-linux-androideabi-compiler

2. http://stackoverflow.com/questions/9868309/how-can-i-run-c-binary-executable-file-in-android-from-android-shell

相关代码:https://github.com/dizuo/ndk_tutorial/tree/master/android_build_c_exec

Android上通过gcc编译普通的C程序

时间: 2024-09-30 06:33:41

Android上通过gcc编译普通的C程序的相关文章

Android上方便地开发的C程序

如果你基于没有一个专门的开发板练手,那你的Android手机也可以开发大多数C应用程序,安装好后编译C的编译器.本文只写一个Hello World的运行过程.优点是:不需要eclipse,不需要Android源码,不需要Android.mk,不需要NDK.一个C程序员就可以很好的利用Android了,需要一个编译器和一个adb要把程序放到Android系统中. 1.安装adb sudo apt-get install android-tools-adb 2.安装交叉工具链 sudo apt-ge

linux下使用gcc编译运行C程序

gcc(GNU Compiler Collection)是Linux下最常用的C语言编译器,是GNU项目中符合ANSI C标准的编译系统,能够编译用C.C++和Object C等语言编写的程序.  在linux系统中,常见的使用方法有两种,如下: gcc -o out in1 in2 //gcc编译以及链接(对in1文件和in2文件进行编译生成out.bin文件,"-o":表示生成可执行文件) gcc -c out in1 in2 // gcc编译不链接(对in1文件和in2文件文件进

用gcc编译c语言程序以及其编译过程

对于初学c语言编程的我们来说,学会如何使用gcc编译器工具,对理解c语言的执行过程,加深对c语言的理解很重要!!! 1.预编译 --> 2.编译 --> 3.汇编 --> 4.链接----------------------------------------------------------------------------- 0.编写c代码,并输入以下如图代码,生成c文件hello.c. ----------------------------------------------

centos 7 已经支持 gcc 编译32位程序

通过查看centos的更新包,发现已经支持 gcc 32位版本了. http://mirrors.hustunique.com/centos/7.0.1406/updates/x86_64/Packages/ 对应的文件是: libstdc++-4.8.2-16.2.el7_0.i686.rpm                18-Aug-2014 21:35    301K libgcc-4.8.2-16.2.el7_0.i686.rpm                   18-Aug-20

在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6564592 在前一篇文章提到,从源代码树下载下来的最新Android源代码,是不包括内核代码的,也就是Android源代码工程默认不包含Linux Kernel代码,而是使用预先编译好的内核,也就是prebuilt/android-arm/kernel/kernel-qemu文件.那么,如何才能DIY自己的内核呢?这篇文章一一道来. 一. 首选

编译可在Android上运行的qemu user mode

前言 本文在Ubuntu 64位系统上对qemu项目进行交叉编译,并且只编译与qemu user mode有关的代码. 下文中的”NDK”若无特殊说明均指”Android NDK”. 下文中”$NDK”表示的是NDK的根目录. 步骤 1. 下载并安装Android NDK 下载并安装Android NDK的过程在这里不做介绍. 2. 下载qemu 3. 设置NDK工具的环境变量 为交叉编译设置Android NDK环境变量:NDK.SYSROOT 4. 编译依赖库 glib 编译可在Androi

在Android上运行Java和C程序

在linux上运行java程序,直接用javac编译,再用java启动虚拟机运行就行了.但是在Android上,由于虚拟机和pc端的不同,所以操作方法也是不一样的.下面介绍Android上运行Hello world! 一.单个java文件编译运行 1.在Ubuntu虚拟机上将Hello.java编译成Hello.class文件 2.在Ubuntu上的Android编译环境下生成Hello.jar文件 # dx --dex --output=Hello.jar Hello.class 注意这里的d

使用gcc编译C程序

GCC 全称"GNU C Compiler",不过自从面世后,增加了多种语言的支持,不过用的最多的是还是编译C或C++程序(另外有个工具叫做G++).GCC是一种多目标编译器,通过可交互的后端处理器,为多种计算机架构生成可执行程序. 话说回来,什么是编译器呢? 编译器并不是一个单一的程序,它们通常由六七个稍小的程序组成,这些程序由一个叫做"编译器驱动器(Compiler driver)"的控制程序调用. 编译器一般由以下几部分组成: 预处理器(preprocesso

Ubuntu+NDK编译openssl(为了Android上使用libcurl且支持HTTPS协议)

为了Android上使用libcurl且支持HTTPS协议,需要依赖openssl,因此先来了解一下如何编译OpenSSL1.编译ARM下的共享库(默认的)我使用的是guardianproject的openssl,它已经提供好了android的ndk makefile.git clone https://github.com/guardianproject/openssl-android.git然后直接cd到该目录,$NDK/ndk-build就行.注意默认的使用NDKr5b,如果没有该版本,请