前面2篇文章分别介绍了Android NDK编译的命令行参数,以及如何在任意目录使用Android.mk来编译本地c/c++代码,Andriod.mk和ndk-build只不过是Android官方提供了一套封装过的Android交叉编译环境而已,其实,你可以不用它,而直接通过传统的Makefile文件来编译你的c/c++代码的,本文即介绍如何直接通过传统的Makefile文件来编译可用于Android平台的库文件。

经常搞嵌入式开发的朋友对于交叉编译环境应该并不陌生,说白了,就是一组运行在x86 PC机的编译工具,可以让你在PC机上编译出目标平台(例如ARM)可识别的二进制文件。Android平台也提供了这样的交叉编译工具链,就放在Android的NDK开发包的toolchains目录下,因此,我们的Makefile文件中,只需给出相应的编译工具即可。

废话就先说到这,直接上例子,我们目标是把下面这个math.c文件编译成一个静态库文件:

#include

int add( int a , int b ) {

return a+b;

}

你需要编写一个Makefile文件,这里假设你的Android ndk被安装在 /opt/android/ndk目录下,当然,你可以根据自己的实际情况修改Makefile中相关路径的定义,Makefile文件示例如下:

# Makefile Written by ticktick

# Show how to cross-compile c/c++ code for android platform

.PHONY: clean

NDKROOT=/opt/android/ndk

PLATFORM=$(NDKROOT)/platforms/android-14/arch-arm

CROSS_COMPILE=$(NDKROOT)/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-

CC=$(CROSS_COMPILE)gcc

AR=$(CROSS_COMPILE)ar

LD=$(CROSS_COMPILE)ld

CFLAGS = -I$(PWD) -I$(PLATFORM)/usr/include -Wall -O2 -fPIC -DANDROID -DHAVE_PTHREAD -mfpu=neon -mfloat-abi=softfp

LDFLAGS =

TARGET = libmath.a

SRCS = $(wildcard *.c)

OBJS = $(SRCS:.c=.o)

all: $(OBJS)

$(AR) -rc $(TARGET) $(OBJS)

clean:

rm -f *.o *.a *.so

这里不讲Makefile文件的基本原理,只说明一下针对Android环境的Makefile文件编写的注意事项。

(1) CROSS_COMPILE

必须正确给出Android NDK编译工具链的路径,当在目录中执行make命令的时候,编译系统会根据 CROSS_COMPILE 前缀寻找对应的编译命令。

(2) -I$(PLATFORM)/usr/include

由于Android平台没有使用传统的c语言库libc,而是自己编写了一套更加高效更适合嵌入式平台的c语言库,所以系统头文件目录不能再使用默认的路径,必须直到Android平台的头文件目录

(3) -Wall -O2 -fPIC -DANDROID -DHAVE_PTHREAD -mfpu=neon -mfloat-abi=softfp

这些参数的意义网上基本上都有介绍,我就不一一解释了,并不都是必须添加的,但比较常用。

编译方法:

写好makefile文件,并且保存之后,就可以直接在当前目录下执行make命令,编译完成后,当前目录下会生成 libmath.a ,即可直接拿到Android的jni工程中和使用了。

关于如何直接使用Makefile文件交叉编译Android平台的c/c++代码就介绍到这里了,有任何疑问欢迎留言或者来信lujun.hust@gmail.com交流,或者关注我的新浪微博 @卢_俊 获取最新的文章和资讯。

java交叉编译安卓可用,Android开发实践:Android交叉编译工具链的使用相关推荐

  1. Android开发实践:Java层与Jni层的数组传递

    Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层,由Jni层的Socket代码发送出去,当然,Jni ...

  2. Xamarin.Android开发实践(十七)

    Xamarin.Android开发实践(十七) 原文:Xamarin.Android开发实践(十七) Xamarin.Android之定位 一.前言 打开我们手中的应用,可以发现越来越多的应用使用了定 ...

  3. Xamarin.Android开发实践(十四)

    原文:Xamarin.Android开发实践(十四) Xamarin.Android之ListView和Adapter 一.前言 如今不管任何应用都能够看到列表的存在,而本章我们将学习如何使用Xama ...

  4. Xamarin.Android开发实践(一)

    原文:Xamarin.Android开发实践(一) 一.准备工作 1.创建一个空的解决方案,并命名为Phoneword 2.右击解决方案 新建->新建项目 并命名为Phoneword_Droid ...

  5. android并发命令,Android开发实践:基于命令模式的异步任务线程

    关于Android的异步操作,我在文章<Android开发实践:线程与异步任务>中介绍了两种方法,一种是采用线程,另一种是采用AsyncTask,今天再深入探讨下另一种模型:命令式的异步任 ...

  6. 最全Android 开发和安全系列工具

    [阿里聚安全出品]史上最全Android 开发和安全系列工具 作者 菜刀文 关注 2017.02.20 00:08 字数 4554 阅读 725评论 1喜欢 29 作者:阿里聚安全 地址:https: ...

  7. android开发监听媒体播放器,Android开发之媒体播放工具类完整示例

    本文实例讲述了Android开发之媒体播放工具类.分享给大家供大家参考,具体如下: package com.maobang.imsdk.util; import android.media.Media ...

  8. 【Android开发】Android入门安装与使用教程——以Android Studio3.6.1为例

    [Android开发]Android入门教程--以Android Studio3.6.1为例 1.为什么要学习Android 2.学习资源 3.安装Android Studio 3.1 下载安装包 3 ...

  9. 【Android开发】Android Studio中进行简单的WebView构建浏览器开发1

    [Android开发]Android Studio中进行简单的WebView构建浏览器开发 第一步:新建一个Android Project 第二步:修改AndroidMainfest.xml文件 第三 ...

  10. 【Android开发】Android Studio中进行简单的WebView构建浏览器开发2

    [[Android开发]Android Studio中进行简单的WebView构建浏览器开发2 第1步:在上一篇博客的基础上,修改activity_main.xml 第2步:在MainActivity ...

最新文章

  1. 获取BT节点信息bittorrent-discovery
  2. 红盟idc技术培训群—安全培训(三)
  3. 数据预处理:原始数据集快速分类的方法,numpy的使用技巧,数据的row=mask的column
  4. Centos7 更新pip和scipy
  5. 吵架后女生和男生的夜晚!所有男生都这样吗?
  6. Git初学札记(一)————Git简介与安装
  7. 为什么不用小驼峰也能查到数据库数据_为什么不用驼峰命名创建表名和字段?...
  8. 使用U盘在Windows与Mac上传输数据
  9. c语言课后作业答案指针,C语言程序基础练习题带答案
  10. php居中函数,PHP实现的自定义图像居中裁剪函数示例
  11. linux-mint下搭建android,angularjs,rails,html5开发环境
  12. win-pe 重置win10密码“SAM 文件只读属性,修改操作无法保存”的解决办法
  13. 轻便提示插件tipTip
  14. 虚幻引擎4学习途径汇总
  15. led大屏按实际尺寸设计画面_LED显示屏尺寸规格及计算方法
  16. Discuz!安全防护之注册机防护插件免费发布
  17. Thanos 组件介绍以及使用心得
  18. 如何用c语言教小学生学英语,家长怎么教小学生学英语
  19. python读取excel成绩表,并设置柱状图
  20. 网络安全毕业设计选题题目大全

热门文章

  1. 业务安全 –业务逻辑漏洞
  2. 使用matlab根据液体扩散图片分析其对应的等浓度线
  3. pytorch深度学习单卡训练和多卡训练
  4. htmlparser 获取html,利用htmlparser进行网页信息的抽取
  5. putchar是不是合法的c语言标识符,关于putchar()
  6. JAVA英雄血战代码,骑士助手版英雄血战下载
  7. 蒜头君的旅游计划--深搜dfs
  8. asp mysql 符号乱码_asp MYSQL出现问号乱码的解决方法
  9. 阿里巴巴1000亿助力共同富裕
  10. 流言终结:JS字符搜索的飞雷神之术?