分享

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

 quasiceo 2016-12-18
Android上通过gcc编译普通的C程序
2014-06-07      0 个评论    来源:Android上通过gcc编译普通的C程序  
收藏    我要投稿

1.编译可执行程序

1.1 通过mk脚本编译 目录结构:
1
2
3
4
mk_app
    jni
        main.c
        Android.mk
1

Android.mk内容十分满简单:
1
2
3
4
5
6
7
8
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= main_exec
LOCAL_SRC_FILES := main.c
include $(BUILD_EXECUTABLE)
命令下,cd到jni的上一级目录,然后执行ndk-build命令:
1
2
3
4
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工具编译 目录结构:
1
2
gcc_app
    main.c
命令行,cd到gcc_app目录下,然后执行下面命令:
1
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拷贝到手机上执行

具体操作如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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
shell@mako:/ $ cp /sdcard/main_exec /data/local/
cp /sdcard/main_exec /data/local/
cp: /data/local/main_exec: Permission denied
1|shell@mako:/ $ cp /sdcard/main_exec /data/local/tmp
cp /sdcard/main_exec /data/local/tmp
shell@mako:/ $ cd /data/local/
cd /data/local/
shell@mako:/data/local $ cd tmp
cd tmp
shell@mako:/data/local/tmp $ ls -l main_exec
ls -l main_exec
-rwxr-x--x shell    shell        6260 2014-06-06 16:30 main_exec
shell@mako:/data/local/tmp $ chmod 751 main_exec
chmod 751 main_exec
shell@mako:/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:///questions/21424366/how-to-use-arm-linux-androideabi-compiler 2. http:///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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多