最近有项目需要对接到Android平台,就去研究了一下Android NDK,结果一看竟然有那么多的内容,不论是使用Makefile还是Android.mk编译,总是不是找不到这个.o文件,就是找不到那个库,总之就是解决这个错误,又出现另一个错误,但实际上来说,项目只有一小部分跟Android有关的内容,全部使用NDK实在大材小用,而且要使用熟练使用NDK实在不是一朝一夕能搞定的事儿。头大了一天,最后终于在docs中发现了把toolchain独立出来的方法。

独立出来的toolchain可是直接在Makefile中使用,而不需要自己去重新编写Android.mk文件,减少了很多麻烦,毕竟用自己熟悉的Makefile能解决问题。

从Android NDK中独立toolchain步骤(系统为Ubuntu(32位)):

1、下载Android NDK

地址:http://developer.android.com/tools/sdk/ndk/index.html ,下载对应版本

个人网盘共享链接:http://pan.baidu.com/s/1hqGIV9E

2、独立toolchain

把NDK压缩包解压到系统,如/mnt目录下,后在/mnt目录下建立文件夹my_ndk_toolchain,然后再/mnt目录下执行以下命令:

/mnt/android-ndk-r9c/build/tools/make-standalone-toolchain.sh --platform=android-19 --toolchain=arm-linux-androideabi-4.8 --stl=stlport --install-dir=/mnt/my_ndk_toolchain

出现以下打印:

dir=/mnt/my_ndk_toolchain

Copying prebuilt binaries...

Copying sysroot headers and libraries...

Copying libstdc++ headers and libraries...

Copying files to: /mnt/my_ndk_toolchain

Cleaning up...

Done.

说明独立的工具链成功,对执行的命令进行简单说明:

/mnt/android-ndk-r9c/build/tools/make-standalone-toolchain.sh:执行NDK目录下make-standalone-toolchain.sh脚本;

--platform:指工具链将使用哪个版本的Android API,可cd /mnt/android-ndk-r9c/platform中查看,我这里使用的是Android-19;

--toolchain:指独立出来的工具链哪种用途的编译,arm(arm-linux-androideabi-4.8),X86(x86-4.8)或MIPS(mipsel-linux-android-4.8),可cd toolchains中查看并选择适合的类型,我这里使用的是嵌入式;

--stl:指工具链支持C++ stl,stlport代表C++库将静态链接,stlport_shared将动态链接;

--install-dir:指安装目录;

注意:因为我使用的是32-bit Ubuntu,独立工具链默认是32位,所以在参数中没有指定系统类型,如果是64-bit Linux系统,需加入--system=linux-x86_64 或MacOSX加入--system=darwin-x86_64。

3、测试程序

hello.cpp

#include

#include

int main(int argc, char **argv)

{

std::string str = "hello, ndk! this is my own toolchain! ^-^";

std::cout << str << std::endl;

return 0;

}

Makefile

rm=/bin/rm -f

CC=/mnt/my_ndk_toolchain/bin/arm-linux-androideabi-g++

PROGNAME = main

INCLUDES= -I.

CFLAGS  = $(INCLUDES) -g -fPIC -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE

OBJS   = hello.o

LDFLAGS =

all :$(PROGNAME)

%.o: %.cpp

$(CC) $(CFLAGS) -c -o $@ $<

$(PROGNAME) : $(OBJS)

@echo  "Linking $(PROGNAME)......"

${CC} ${LDFLAGS} -o ${PROGNAME} ${OBJS}

@echo  "Linking Success!"

clean:

$(rm) *.o  $(PROGNAME)

编译后得到可执行文件:main,adb push到嵌入式Android平台后,./main运行,得到以下结果:

root@android :/data # ./main

hello, ndk! this is my own toolchain! ^-^

android ndk makefile,用Android NDK打造自己的toolchain(使用C/C++默认的Makefile)相关推荐

  1. 用Android NDK打造自己的toolchain(使用C/C++默认的Makefile)

    2019独角兽企业重金招聘Python工程师标准>>> 把NDK压缩包解压到系统,如/mnt目录下,后在/mnt目录下建立文件夹my_ndk_toolchain,然后再/mnt目录下 ...

  2. 【Android 逆向】Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | 使用 Makefile 构建 Android 平台 NDK 应用 )

    文章目录 一.Visual Studio 中创建 Makefile 项目 二.配置 Makefile 文件 三.配置 Android.mk 四.配置 Application.mk 五.主函数源码 六. ...

  3. 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )

    文章目录 I . CMake 简介 II . Android Studio 中 CMake 引入静态库流程 III . 指定 CMake 最小版本号 IV . 导入函数库 ( 静态库 / 动态库 ) ...

  4. android.mk ndk编译选项优化,Android NDK 编译脚本分析 之一

    版权信息:本文为本人原创,欢迎转载,但请著明出处,并保留本版权信息. Android NDK编译脚本编写起来还是是比较简单条理的,然而它的语法和传统的linux GNU Make编译脚本的编写似乎有很 ...

  5. protobuf android ndk,直接在Android NDK端使用tensorflow(不使用JAVA api)

    这是我如何解决这个问题.虽然没有太多关于在an​​droid上使用c apis以及编译和链接tensorflow到NDK的文档,但是makefile有重要的注释以及相关的脚本.编译步骤与ios非常相似 ...

  6. android ndk 多线程mk,Android NDK 开发教程六: application.mk

    配合android.mk 使用的make 文件还有一个application.mk ,大部分情况无需修改该文件,下面也来自网络翻译 Application.mk文件 简介: ---------– 要将 ...

  7. 【Android】Eclipse自动编译NDK/JNI的三种方法

    [Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...

  8. [Android] 环境配置之Android Studio开发NDK

    2019独角兽企业重金招聘Python工程师标准>>> ======================================================== 作者:qiu ...

  9. 【Android NDK 开发】Android Studio 使用 CMake 导入动态库 ( 构建脚本路径配置 | 指定动态库查找路径 | 链接动态库 )

    文章目录 I . CMake 引入动态库与静态库区别 II . Android Studio 中 CMake 引入动态库流程 III . 指定动态库查找路径 IV . 链接函数库 V . 完整代码示例 ...

  10. 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )

    文章目录 I . Android Studio 中使用 Android.mk 配置静态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

最新文章

  1. 如何查看node的版本及安装的位置?
  2. 建设局项目总结(一)
  3. Chrome 开发者工具 官方文档
  4. JavaSE网络编程练习
  5. 线性规划专题——Lingo的使用
  6. AirSim中的物理引擎
  7. 网件路由器使用计算机mac,网件路由器怎么设置进行无线网卡MAC访问控制
  8. 编译适配 联想Y1(NewifiMini)的Padavan 固件
  9. idea文件名颜色的区别
  10. html教程转换mp3,kgm转换mp3图文版教程,值得收藏
  11. 2020产品经理升职攻略-直播分享课
  12. meo学习笔记1:编译是什么——程序的执行过程概述
  13. 通过自定义镜像创建具有相同操作系统、应用程序和数据的百度云服务器BCC,有效提高交付效率!
  14. ES 7.0.1安装head和sql插件报错处理
  15. java设备未就绪_java.io.IOException: 设备未就绪
  16. 语音论文:用于端到端语音识别的简化完全量化的Transformer模型
  17. Arm中国开工礼:iPhone + AirPods Pro,我酸了!
  18. 【C语言】scanf语句里关于%c的问题
  19. 计算机模拟虚拟筛选操作流程
  20. 3. web前端开发分享-css,js提高篇

热门文章

  1. 在C#中控制ListBox某一行的字体颜色
  2. Window mobile 实现CLIST始终选中最新添加数据
  3. 【Spring-AOP】源码分析汇总
  4. 面试题:原型Bean在一个线程多次获取是否一样?
  5. 关于缓存击穿、缓存穿透、缓存雪崩及解决方案
  6. 第 3 章 sqlmap - automatic SQL injection and database takeover tool
  7. 《鸟哥的Linux私房菜》读书笔记
  8. Windows切换窗口
  9. 虚拟机 linux 设置IP 常用命令
  10. LigerUI权限系统之角色管理