Android上运行本地c
在android代码中编译一个可执行文件,主要功能是对文件的读写,
简单贴出来:
- #include <errno.h>
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <unistd.h>
- void read_data(void){
- char readBuf[640*1024];
- char *path = "/boot0_nand";
- FILE* fp= fopen(path,"rb");
- if(!fp){
- printf("can't open %s\n",path);
- }
- size_t len = fread(readBuf,sizeof(char),sizeof(readBuf),fp);
- printf("read len = %d \n",(int)len);
- fclose(fp);
- }
- int main(int argc, char** argv) {
- int ret;
- int opt;
- read_data();
- }
起初,是用android的编译环境,定义了android.mk文件如下:
- include $(CLEAR_VARS)
- LOCAL_SRC_FILES := writeBoot/write_boot.c
- LOCAL_MODULE := write_boot
- LOCAL_FORCE_STATIC_EXECUTABLE := true
- LOCAL_MODULE_TAGS := eng
- LOCAL_STATIC_LIBRARIES := libstdc++ libc libcutils
- include $(BUILD_EXECUTABLE)
编译通过,但是执行到fread的时候,就报错了:Segmentation fault
一直搞不明白,那么简单的代码,就报这个错误!
无奈,实在是没办法,就用gcc来编译,方法如下:
- gcc write_boot.c -o write_boot
把write_boot推到小机,修改权限,执行,又报错:not executable: magic 7F45
网上查了一下,通过Android NDK来编译生成,这个比较简单:
编辑一个脚本如下,命名agcc:
- #!/bin/sh
- OS='linux'
- ANDROIDSDK='android-14'
- ANDROID='/home/xiongtie/workspace/A31/android41'
- PROGDIR='/home/xiongtie/workspace/A31/android41/prebuilts/ndk/android-ndk-r7/'
- PROGDIR=`cd $PROGDIR && pwd`
- ARMEABIGCC=$ANDROID/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin/arm-linux-androideabi-gcc
- ARMEABILIB=$PROGDIR/platforms/$ANDROIDSDK/arch-arm/usr/lib
- ARMEABIINC=$PROGDIR/platforms/$ANDROIDSDK/arch-arm/usr/include
- ARMEABICRT=$PROGDIR/platforms/$ANDROIDSDK/arch-arm/usr/lib/crtbegin_dynamic.o
- LINKER=/system/bin/linker
- echo "GCC:"$ARMEABIGCC "LIB:"$ARMEABILIB "LINKER":$LINKER "PARAMS:"$@
- $ARMEABIGCC $@ -Wl,-rpath-link=$ARMEABILIB,-dynamic-linker=$LINKER -L$ARMEABILIB $ARMEABICRT -I$ARMEABIINC -nostdlib -lc
编译名如下:
- ./agcc write_boot.c -o write_boot
再推到小机执行,ok,完成了
Android上运行本地c的更多相关文章
- 编译可在Android上运行的qemu user mode
前言 本文在Ubuntu 64位系统上对qemu项目进行交叉编译,并且只编译与qemu user mode有关的代码. 下文中的”NDK”若无特殊说明均指”Android NDK”. 下文中”$NDK ...
- 系列篇|编译可在Android上运行的依赖库(一):glib库
前言 这是系列文章,它们由<编译可在Android上运行的glib库>及其他4篇文章组成,这4篇文章在“编译依赖库”一节中列出.由于glib库依赖于其他第三方库,所以需要先将依赖的第三方库 ...
- react native-调用react-native-fs插件时,如果数据的接口是需要验证信息的,在android上运行报错
调用react-native-fs插件时,如果数据的接口是需要验证信息的,在android上运行报错,而在iOS上运行没问题.原因是因为接口是有验证信息的,而调用这个插件时没有传入,在iOS上会自动加 ...
- 在Android上运行Java和C程序
在linux上运行java程序,直接用javac编译,再用java启动虚拟机运行就行了.但是在Android上,由于虚拟机和pc端的不同,所以操作方法也是不一样的.下面介绍Android上运行Hell ...
- 在 android 上运行 python 的方法
在android上运行python脚本,或者在android上使用python交互界面,对熟悉python的研究或开发人员来说,是一件很有吸引力的事情,因为python脚本真是非常高效,另外,有很多非 ...
- Unity3D之AssetBundle学习:Android上运行笔记
路径统一 在Android上加载StreamingAssets文件夹下的AssetBundle文件,首先需要对加载地址进行处理,注意PC.Android和IOS的地址不一致需要针对不同的平台不同的处理 ...
- 在Android 上运行 openCV ,并做灰度变化的一个例子
OpenCVImageProcessing1. 导入Opencv的 androrid SDK灰度算法 OpenCVImageProcessing 导入opencv Jar包,配置OpenCVLibra ...
- 在Android上使用qemu-user运行可执行文件
在Android上使用qemu-user运行可执行文件 作者:寻禹@阿里聚安全 前言 QEMU简要介绍: QEMU可以解释执行可执行程序.既然QEMU可以解释执行可执行程序,那么QEMU就能够知道执行 ...
- 准备开发一个运行在Android上的JavaME模拟器
在一个虚拟机A上运行另外一个虚拟机B看起来是挺不靠谱的一件事,在手机上运行某个虚拟机也不怎么靠谱.并且如果虚拟机A运行在手机上这个听起来就更不靠谱了.但是很多人就在做这样的事.比如在在手机上运行DOS ...
随机推荐
- 阅读express的感悟
在github上看了半天的源码,也是云里雾里,勉强也算看完了,通过查看很多人的讲解也方便了我的理解,今天记录下来,也算是做个笔记. 进入express的源码文件里我们可以看到8个文件:middlewa ...
- LINUX USB MASS STORAGE DRIVER流程图
- 全选demo
我们处理数据时,最好能够支持全选操作. 选中之后,进行删除,或其他处理. 我自己写了一个demo. 主要功能: 1.点击全部选中 2.点击全部取消 3.然后进行获取选中的id,进行处理 代码如下: & ...
- cf459C Pashmak and Buses
C. Pashmak and Buses time limit per test 1 second memory limit per test 256 megabytes input standard ...
- 定时PING下IP地址,检测该服务器是否还活着。 smokeping
http://oss.oetiker.ch/smokeping-demo/?displaymode=n;start=2014-10-16%2007:00;end=now;target=SIP
- 10年程序员谈.Net程序员的职业规划(图/文)
原文地址:http://bbs.csdn.net/topics/390736769 从事Dotnet程序开发工作近10年了,从开始的月薪3k的小程序员菜鸟,到现在年薪60w的项目总经理,从战战兢兢的去 ...
- 每日一dp(2)——龟兔赛跑(hdu 2059)
比較经典的动态规划的题目了 一般动态规划的想法都是先推断是否有最优子结构,无后效性.接着从状态转移入手,尽量细分状态(即给定N得到N+1),完了再递推计算 难点:转移方程,其一般也难在怎样描写叙述一个 ...
- HTML5音乐可视化
环境搭建 1,安装nodejs和Git,配置环境变量2,安装express,npm install -g express-generator3,创建项目,express -e music(项目名称)4 ...
- Android自定义工具类获取按钮并绑定事件(利用暴力反射和注解)
Android中为按钮绑定事件的有几种常见方式,你可以在布局文件中为按钮设置id,然后在MainActivity中通过findViewById方法获取按钮对象实例,再通过setOnClickListe ...
- 解决IP地址被占用问题
问题背景: 在公司一直有同事在抱怨IP地址总是被占用的问题,我决定用技术解决这个问题 解决方案: 1 最开始想在防火墙里面做IP和mac地址绑定,做了几个之后,还是有同事在说IP被占用,后来 分析了一 ...