Android上通过gcc编译普通的C程序
2014-06-06 17:04
323 查看
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
ndk-build命令扩充:
# 输入编译目录 ndk-build -c jni_dir # 强制重新build: ndk-build -B # 输出build的指令,也是调用了g++命令 ndk-build V=1
ref : http://weimingtom.iteye.com/blog/1018710
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 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://stackoverflow.com/questions/21424366/how-to-use-arm-linux-androideabi-compiler2. 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 上,用普通的 am-linux-gcc 编译 C 程序。
- Android 上,用普通的 am-linux-gcc 编译 C 程序。 .
- Android 运行 C/C++程序 (使用 arm-linux-gcc 交叉编译环境)
- gcc手动编译android可执行程序
- gcc编译通过,但运行程序出现段错误
- Linux通过vi编写C程序,通过gcc编译
- 安装交叉编译工具arm-none-linux-gnueabi-gcc——Linux上编译在android上运行的c程序
- android:WindowTitle导致程序无法编译通过
- 【ndk】直接使用ndk提供的arm-linux-androideabi-gcc编译android可执行程序
- GCC/LD编译链接潜规则 (第四弹) : ld 会把所有通过-l指定的动态库全部链接进最终的目标程序中, 无论是否真的用到(导致生产环境加载失败)
- 在android环境下用gcc编译程序
- Android 运行 C/C++程序 (使用 arm-linux-gcc 交叉编译环境)
- Gcc编译C/C++程序
- Flex 中通过程序控制编译后的SWF文件属性,包括大小,背景色等。
- GCC 编译程序出现 warning:no newline at the end of file
- 请教:我的Socket程序在unix-center上编译不通过? ( 注: 在 t1000.unix-center.net 上)
- 借助交叉编译用C编译Android上运行的程序
- 解决了gcc 4.3.2 无法编译通过的问题
- 用gcc编译成执行程序
- 怎么让中文环境的系统用gcc编译程序时输出内容为英文