我的环境:

Ubuntu12.04

Android2.2

这里的C语言程序指的是运行与android系统的Linux内核上程序,目前为止有两种方法:第一种是自动编译,第二种是手动编译。这两种方法适用于不同的情况,自动编译方便快捷,但无法在编译时添加非Android的库;手动编译略显复杂,尤其是在不同的Android系统中会有不同的路径,但可以加入除Android以外的库进行编译。

1 自动编译

(1)在$(yourAndroid)/development目录下,创建一个test目录,其中$(yourAndroidDir)代表你的Android源代码的根目录,下面的同样如此,不再赘述

$ mkdir $(yourAndroidDir)/development/test

(2)在test目录下,编写test.c文件,测试内容如下:

#include

int main()

{

printf("test output/n");

exit(0);

}

(3)在test目录下,创建Android.mk文件,添加内容如下:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := test

LOCAL_SRC_FILES := test.c

include $(BUILD_EXECUTABLE)

其中:

LOCAL_MODULE指定要编译的模块名

LOCAL_SRC_FILES  指定源文件路径

include $(BUILD_EXECUTABLE)指定编译成可执行文件,若改为include $(BUILD_EXECUTABLE),则指定编译成动态链接库

(4)回到Android源代码根目录,开始编译

$ cd $(yourAndroidDir)

$ make test

(5)将代码加入到Android系统中,前提是你需要已经开启了一个Android模拟器

$ adb push test /data

这样一来,编译好的test可执行文件就被拷贝到Android系统的/data路径下了

(6)运行程序,需要进入adb shell,然后输入下面的命令,即可运行程序,会在shell下看到输出结果。

$ cd data

$ ./test

2 手动编译

(1)编译成目标文件,即.o文件

$ $(yourAndroid)/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gcc -I bionic/libc/arch-arm/include/ -I bionic/libc/include -I bionic/libc/kernel/common -I bionic/libc/kernel/arch-arm -c test.c -o test.o命令类似Linux下的gcc编译格式,当然这其中可以加入你自己编译时需要的非Android库

(2)生成可执行代码

$ $(yourAndroid)/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gcc -nostdlib -Bdynamic -Wl,-T,build/core/armelf.x -Wl,-dynamic-linker,/system/bin/linker -Wl,--gc-sections -Wl,-z,nocopyreloc -o test -Lout/target/product/generic/obj/lib -Wl,-rpath-link=out/target/product/generic/obj/lib -lc test.o -entry=main

(3)将代码加入到Android系统中并运行,和上面的自动编译方法相同,不再重复。

注意,有时候运行了C语言的程序后,会有下面的输出:

[1] + Stopped (signal)        ./test

原因是源文件.c文件中会有“return 0”这样的语句,出现这个的原因是return调用造成堆栈下溢

将 “return 0”改为  “exit(0)” 即可解决这个问题。

c语言程序能在android,android环境下编译并运行C语言程序相关推荐

  1. 二级c语言编译完程序如何运行,计算机二级C语言辅导:C++环境下编译和运行c语言...

    一 单个文件运行 1 打开vc++出现如图 2 从file菜单中选择"new"→c++source file如图 3 单击"--"命令按扭,在choose di ...

  2. Linux 下编译并运行C语言程序

    Linux下编译并运行C语言程序 ,以Centos 系统为例 1>新建一个hello.c文件 可以直接用图形用户界面新建也可以使用命令新建. 用命令行的话,要用到Linux下的vi编辑器的相关命 ...

  3. Linux环境下编译并执行ava helloworld程序

    http://blog.lupaworld.com/home-space-uid-24466-do-blog-id-2578.html 已经学会怎样在Windows下怎样编辑,编译和运行Java程序了 ...

  4. C++下编译和运行C语言程序

    1.新建源文件 打开 Dev C++,在上方菜单栏中选择"文件 --> 新建 --> 源代码": 或者按下Ctrl+N组合键,都会新建一个空白的源文件,如下图所示: 在 ...

  5. 在DOS环境下编译及运行java程序教程

    http://wenku.baidu.com/view/3d8e43777fd5360cba1adb33.html

  6. window与linux环境下,java调用c语言的方法

    windows环境下,java调用c语言的方法 1.环境 C语言编译器:工具比较多,本文使用的是gcc,带gcc的软件业比较丰富,我使用的是TDM-GCC, 注:网上很多使用的是MinGW,但我遇到了 ...

  7. Android模拟器环境下SD卡内容的管理[转]

    Android模拟器环境下SD卡内容的管理 2010-11-30 22:03 by ·风信子·, 2305 阅读, 0 评论, 收藏, 编辑 本文旨在介绍一些Android模拟器下如何对SD卡内容进行 ...

  8. android单元测试android环境,基于Robolectric的Android单元测试 —环境搭建与部署运行...

    移动端的测试中,因为回归一些逻辑分支比较多的功能时工作量比较大,且不太适合用UI完成,尝试通过单元测试来完成.几经波折终于完成了一个功能的UT用例并在CI上部署运行,现总结如下: 一.Robolect ...

  9. Android让APP运行在新环境上,Android Studio环境在真手机运行app项目教程

    对于Android Studio环境在真手机运行app项目的相关操作有许多网友咨询过,小编今天就分享Android Studio环境在真手机运行app项目的详细步骤,一起好好学习下吧! 要想将Andr ...

最新文章

  1. java框架篇---hibernate(一对多)映射关系
  2. LeetCode Contains Duplicate III(滑动窗口)
  3. mysql半复制_mysql半同步复制
  4. Spring里Bean类的运行时小写之谜
  5. 线性代数(六)正交性
  6. ubuntu安装ROS教程
  7. 苹果x Android,中国发明安卓iPhoneX 安卓iPhoneX有何特别之处?
  8. Druid 技术白皮书:大数据实时统计分析数据存储
  9. 史上最全的数学建模竞赛介绍,大家不要错过哦!!!
  10. DMCTF writeup
  11. 终端连接阿里云服务器出现Permission denied (publickey)解决方法
  12. 共享雨伞,又一个昙花一现的共享经济?
  13. mysql删除不彻底,mysql删除不彻底的解决方法
  14. 数据结构——单链表 | 完善单链表
  15. MySQL内置函数中的日期和时间函数详解
  16. 男程序员怎么过妇女节
  17. 家庭宽带相关知识及工具
  18. 【问题篇】git在push上传代码时,报错“fatal: unable to access ‘‘: OpenSSL SS”
  19. python文件生成exe文件
  20. 大数据必知:Hadoop的三大组件和特点

热门文章

  1. C# Winform Chart控件用法4之饼状图
  2. APP设备数据的特征衍生与模型应用
  3. IO流------缓冲流、转换流、序列化流、commons-io工具包
  4. 《PR基础教程入门篇-学习笔记》-010
  5. Vue 3 实现音乐播放器,Java web后端实现主流音乐搜索服务
  6. kaggle notebook里面如何使用一个完整的项目和py脚本
  7. 台达服务器怎么把绝对位置初始化,台达plc上电时参数的自动初始化实例
  8. 小程序服务器的内存多少够用,实测:微信小程序占多少内存?或许真没有你想象的那么“小”!...
  9. JAVA必备—java流,考验你的想象力
  10. linux动态调频响应时间,CPU动态调频(linux 3.14.0)一