ndk编译android上运行的c程序
来源:互联网 发布:java输入一个数组 编辑:程序博客网 时间:2024/04/19 11:11
上次工作中需要编译一个C项目,运行在android的shell上。当时的做法是从android编译环境中分离工具链,拷贝出prebuilt下的ara-eabi-gcc、拷贝出out下bionic生成的一些so文件、以及bionic的头文件。这样做起来很麻烦。
今天偶尔看到ndk,发现ndk可以完成这个任务。
1. 下载安装ndk
从android.com上下载最新的ndk包:
# wget http://dl.google.com/android/ndk/android-ndk-r7-linux-x86.tar.bz2
# tar xvfj android-ndk-r7-linux-x86.tar.bz2
然后将ndk根路径加入到PATH
2. 编译hello-jni工程
ndk带的sample中有hello-jni工程,它包含java代码和一些函数的jni实现。编译jni时需要用ndk。
编译jni:
# ndk-build
这时会提示awk错误:
prebuilt/linux-x86/bin/awk: 4: Syntax error: word unexpected (expecting ")")
从http://stackoverflow.com/questions/8116113/problems-with-android-ndk-7-and-awk的信息看,这个akw是for x86_64的,所以运行有问题。只需要禁掉它,主机的awk就可以了:
# mv prebuilt/linux-x86/bin/awk prebuilt/linux-x86/bin/awk64
再次执行ndk-build就会成功在hello-jni/libs下生成so文件。用ant debug就会编译java文件,并将生成的jni so文件打包到apk。
3. 编译一个独立的hello程序
创建目录hello/jni,在jni下创建hello.c和Android.mk:
// hello.c#include <stdio.h>int main(){ printf("hello\n"); return 0;}
// Android.mkLOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES:= hello.cLOCAL_MODULE:= helloLOCAL_FORCE_STATIC_EXECUTABLE := true#LOCAL_STATIC_LIBRARIES := libc#LOCAL_CFLAGS += -Iinclude/dir -DSOMEFLAGSinclude $(BUILD_EXECUTABLE)
注意:jni目录是必须的,否则ndk-build会编译出错,报告:
Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
/Developer/android-ndk-r4b/build/core/build-local.mk:85: *** Android NDK: Aborting . Stop.
执行ndk-build后,会生成可执行文件hello,push到android设备上即可运行。
- ndk编译android上运行的c程序
- NDK编译Android上运行的C可执行程序
- 如何编译能在android上运行的C程序
- Windows平台使用NDK编写在Android上运行的C/C++标准程序
- 借助交叉编译用C编译Android上运行的程序
- Android NDK编译带STL的 C/C++ 程序
- Android NDK编译带STL的 C/C++ 程序
- Android NDK编译带STL的 C/C++ 程序
- ubuntu android交叉编译c程序 ndk
- Android NDK编译纯C程序
- 编译一个可以运行在openwrt上的c程序
- 编译一个可以运行在openwrt上的c程序
- 编译一个可以运行在openwrt上的c程序
- 编译一个可以运行在openwrt上的c程序
- Android上运行C程序
- 用ndk编译ace在android上运行
- Android NDK-r5 成功运行编译运行第一个NDK程序
- android ndk c编译
- Zookeeper使用和探究
- php多文件上传
- Apache .htaccess使用
- C++程序 证明类的数据成员的内存分配是独立的 ,成员函数是共享的
- memcache当机造成 mysql发生风暴
- ndk编译android上运行的c程序
- 内存字节对齐
- php文件下载
- 个人对“进程上下文”和“中断上下文”的理解
- height、clientHeight、scrollHeight、offsetHeight区别
- Linux网络编程--struct hostent结构体
- mahout SparseVectorsFromSequenceFiles详解(3)
- vimrc syntax 学习笔记
- 图像去模糊之初探--Single Image Motion Deblurring