c语言程序能在android,android环境下编译并运行C语言程序
我的环境:
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语言程序相关推荐
- 二级c语言编译完程序如何运行,计算机二级C语言辅导:C++环境下编译和运行c语言...
一 单个文件运行 1 打开vc++出现如图 2 从file菜单中选择"new"→c++source file如图 3 单击"--"命令按扭,在choose di ...
- Linux 下编译并运行C语言程序
Linux下编译并运行C语言程序 ,以Centos 系统为例 1>新建一个hello.c文件 可以直接用图形用户界面新建也可以使用命令新建. 用命令行的话,要用到Linux下的vi编辑器的相关命 ...
- Linux环境下编译并执行ava helloworld程序
http://blog.lupaworld.com/home-space-uid-24466-do-blog-id-2578.html 已经学会怎样在Windows下怎样编辑,编译和运行Java程序了 ...
- C++下编译和运行C语言程序
1.新建源文件 打开 Dev C++,在上方菜单栏中选择"文件 --> 新建 --> 源代码": 或者按下Ctrl+N组合键,都会新建一个空白的源文件,如下图所示: 在 ...
- 在DOS环境下编译及运行java程序教程
http://wenku.baidu.com/view/3d8e43777fd5360cba1adb33.html
- window与linux环境下,java调用c语言的方法
windows环境下,java调用c语言的方法 1.环境 C语言编译器:工具比较多,本文使用的是gcc,带gcc的软件业比较丰富,我使用的是TDM-GCC, 注:网上很多使用的是MinGW,但我遇到了 ...
- Android模拟器环境下SD卡内容的管理[转]
Android模拟器环境下SD卡内容的管理 2010-11-30 22:03 by ·风信子·, 2305 阅读, 0 评论, 收藏, 编辑 本文旨在介绍一些Android模拟器下如何对SD卡内容进行 ...
- android单元测试android环境,基于Robolectric的Android单元测试 —环境搭建与部署运行...
移动端的测试中,因为回归一些逻辑分支比较多的功能时工作量比较大,且不太适合用UI完成,尝试通过单元测试来完成.几经波折终于完成了一个功能的UT用例并在CI上部署运行,现总结如下: 一.Robolect ...
- Android让APP运行在新环境上,Android Studio环境在真手机运行app项目教程
对于Android Studio环境在真手机运行app项目的相关操作有许多网友咨询过,小编今天就分享Android Studio环境在真手机运行app项目的详细步骤,一起好好学习下吧! 要想将Andr ...
最新文章
- java框架篇---hibernate(一对多)映射关系
- LeetCode Contains Duplicate III(滑动窗口)
- mysql半复制_mysql半同步复制
- Spring里Bean类的运行时小写之谜
- 线性代数(六)正交性
- ubuntu安装ROS教程
- 苹果x Android,中国发明安卓iPhoneX 安卓iPhoneX有何特别之处?
- Druid 技术白皮书:大数据实时统计分析数据存储
- 史上最全的数学建模竞赛介绍,大家不要错过哦!!!
- DMCTF writeup
- 终端连接阿里云服务器出现Permission denied (publickey)解决方法
- 共享雨伞,又一个昙花一现的共享经济?
- mysql删除不彻底,mysql删除不彻底的解决方法
- 数据结构——单链表 | 完善单链表
- MySQL内置函数中的日期和时间函数详解
- 男程序员怎么过妇女节
- 家庭宽带相关知识及工具
- 【问题篇】git在push上传代码时,报错“fatal: unable to access ‘‘: OpenSSL SS”
- python文件生成exe文件
- 大数据必知:Hadoop的三大组件和特点
热门文章
- C# Winform Chart控件用法4之饼状图
- APP设备数据的特征衍生与模型应用
- IO流------缓冲流、转换流、序列化流、commons-io工具包
- 《PR基础教程入门篇-学习笔记》-010
- Vue 3 实现音乐播放器,Java web后端实现主流音乐搜索服务
- kaggle notebook里面如何使用一个完整的项目和py脚本
- 台达服务器怎么把绝对位置初始化,台达plc上电时参数的自动初始化实例
- 小程序服务器的内存多少够用,实测:微信小程序占多少内存?或许真没有你想象的那么“小”!...
- JAVA必备—java流,考验你的想象力
- linux动态调频响应时间,CPU动态调频(linux 3.14.0)一