ndk-build官方使用说明
ndk-build 脚本可用于编译采用 NDK 基于 Make 的编译系统的项目。此外,我们还针对 ndk-build 使用的 Android.mk和 Application.mk 配置提供了更具体的文档。
内部编译
运行 ndk-build 脚本相当于运行以下命令:
$GNUMAKE -f <ndk>/build/core/build-local.mk
<parameters>
$GNUMAKE 指向 GNU Make 3.81 或更高版本,<ndk> 则指向 NDK 安装目录。您可以根据这项信息从其他 shell 脚本(甚至是您自己的 Make 文件)中调用 ndk-build。
从命令行调用
ndk-build 脚本位于 NDK 安装目录顶层。要从命令行运行该脚本,请在应用项目目录或其子目录中进行调用。例如:
$ cd <project>
$ <ndk>/ndk-build
在此示例中,<project> 指向项目的根目录,<ndk> 则是您安装 NDK 的目录。
选项
ndk-build 的所有参数都将直接传递到运行 NDK 编译脚本的底层 GNU make 命令。请将 ndk-build 和表单 ndk-build <option> 中的选项结合使用。例如:
$ ndk-build clean
您可以使用以下选项:
clean- 移除之前生成的所有二进制文件。
注意:在 Mac OS X 上,运行
ndk-build clean时若有大量并行执行,可能会导致出现包含以下消息的编译错误:rm: fts_read: No such file or directory要避免出现此问题,请考虑不使用
-jN修饰符,或为N选择较小的值(如 2)。 V=1- 启动编译,并显示编译命令。
-B- 强制执行完整的重新编译。
-B V=1- 强制执行完整的重新编译,并显示编译命令。
NDK_LOG=1- 显示内部 NDK 日志消息(用于调试 NDK 本身)。
NDK_DEBUG=1- 强制执行可调试的编译(详见表 1)。
NDK_DEBUG=0- 强制执行发布版编译(详见表 1)。
NDK_HOST_32BIT=1- 始终使用 32 位模式下的工具链(详见 64 位和 32 位工具链)。
NDK_APPLICATION_MK=<file>- 使用
NDK_APPLICATION_MK变量指向的特定Application.mk文件进行编译。 -C <project>- 编译位于
<project>的项目路径的原生代码。如果您不想在终端通过cd切换到该路径,此选项会非常有用。
可调试版编译与发布版编译
使用 NDK_DEBUG 选项,并在特定情况下通过 AndroidManifest.xml 指定调试版或发布版编译、优化相关行为以及是否包含符号。表 1 显示了每个可能的设置组合的结果。
表 1. NDK_DEBUG(命令行)和 android:debuggable(清单)组合的结果。
| 清单设置 | NDK_DEBUG=0 | NDK_DEBUG=1 | 未指定 NDK_DEBUG |
|---|---|---|---|
| android:debuggable="true" | 调试;符号;已优化*1 | 调试;符号;未优化*2 | (与 NDK_DEBUG=1 相同) |
| android:debuggable="false" | 发布;符号;已优化 | 发布;符号;未优化 | 发布;无符号;已优化*3 |
*1:用于分析。
*2:用于运行 ndk-gdb 的默认值。
*3:默认模式。
注意:NDK_DEBUG=0 相当于 APP_OPTIM=release,并用 -O2 编译。NDK_DEBUG=1 相当于 Application.mk 中的 APP_OPTIM=debug,并用 -O0 编译。要详细了解 APP_OPTIM,请参阅 Application.mk。
例如,命令行上的语法为:
$ ndk-build NDK_DEBUG=1
64 位和 32 位工具链
某些工具链同时随附了 64 位和 32 位版本。例如,目录 <ndk>/toolchain/<name>/prebuilt/ 和 <ndk>/prebuilt/可能同时包含 linux-x86 和 linux-x86_64 文件夹,以分别用于 32 位和 64 位模式下的 Linux 工具。ndk-build 脚本会自动选择工具链的 64 位版本(如果主机操作系统支持的话)。您可以通过在自己的环境或 ndk-build 命令行中使用 NDK_HOST_32BIT=1 来强制使用 32 位工具链。
请注意,64 位工具可以更好地利用主机资源(例如,它们速度更快,并且可处理更大的程序),同时它们仍可以生成 32 位 Android 二进制文件。
要求
通常,您需要安装 GNU Make 3.81 或更高版本才能使用 ndk-build 或 NDK。编译脚本将检测不合规的 Make 工具,并生成错误消息。
如果您已安装 GNU Make 3.81,但默认的 make 命令不启动它,请在您的环境中定义 GNUMAKE,以便在启动 ndk-build 之前指向它。例如:
$ export GNUMAKE=/usr/local/bin/gmake
$ ndk-build
您可以将 $NDK/prebuilt/<OS>/bin/ 中的其他主机预编译工具替换为下列环境变量:
$ export NDK_HOST_AWK=<path-to-awk>
$ export NDK_HOST_ECHO=<path-to-echo>
$ export NDK_HOST_CMP=<path-to-cmp>
ndk-build官方使用说明的更多相关文章
- NDK Build 用法(NDK Build)
1.ndk-build的用法 Android NDKr4引入了一个新的.小巧的shell脚本ndk-build,来简化源码编译. 该文件位于NDK根目录,进入你的工程根目录或子目录之后,在命令行下调用 ...
- 〖Linux〗Clang/Clang++ for Android Binary/NDK build(二进制可执行文件/NDK编译)
#1. 下载并安装NDK(解压即可,目前最新版是r9c) http://developer.android.com/tools/sdk/ndk/index.html #2. 安装NDK独立编译工具 c ...
- Application.mk文件官方使用说明
本文档介绍了 ndk-build 所使用的 Application.mk 编译文件. 我们建议先阅读概念页面,然后再阅读本页面. 概览 Application.mk 指定了 ndk-build 的项目 ...
- Android.mk文件官方使用说明
本页介绍了 ndk-build 所使用的 Android.mk 编译文件的语法. 概览 Android.mk 文件位于项目 jni/ 目录的子目录中,用于向编译系统描述源文件和共享库.它实际上是编译系 ...
- InfluxDB(官方使用说明)
安装InfluxDB OSS 此页面提供有关安装,启动和配置InfluxDB的说明. InfluxDB OSS安装要求 root为了成功完成,需要安装InfluxDB软件包或具有管理员权限. Infl ...
- NDK开发—基础知识实战Demo
简介 前面写了几篇NDK相关的文章: NDK开发-简介&环境搭建(Eclipse,Android Studio) NDK开发-Android Studio+gradle-experimenta ...
- Android 使用NDK编译sipdroid Library
sipdroid是一款开源的运行于Android平台上的voip,目前支持音频和视频通话: 项目拖管地址:http://code.google.com/p/sipdroid/ 下载源代码,导入ecli ...
- 无需cygwin,使用NDK进行开发
NDK从7开始自带编译器,在windows上无需配置cygwin的环境. 在eclips中配置NDK路径 在eclipse中点击菜单栏window-Perferences,配置NDK的路径. 在工程中 ...
- 使用NDK c++建立一个Android应用
使用NDK c++建立一个Android应用 一.工具 ADT(集成了eclipse,cdt,ndk plug-in) NDK (用它来编译c/c++程序) JDK (Java开发包) ANT(ecl ...
随机推荐
- sqlmap选项卡介绍及常用语句
sqlmap的使用方式:python sqlmap.py [options]: sqlmap中一共有以下十六个选项卡: 1.帮助选项卡: 2.Target(目标选项卡): 3.Request(请求选项 ...
- JMETER 使用JDBC查找数据作为参数
有些情况下我们需要读取平台中的用户作为参数,比如用户ID作为参数进行压力测试,我们可以使用CSV文件,如果这样做,需要每一次 都构造文件,比较麻烦.如果可以查询数据库,将查出的数据作为参数循环传入的话 ...
- 阿里云 OSS文件存储挂到云服务器ESC文件系统中
ossfs能让您在Linux系统中,将对象存储OSS的存储空间(Bucket)挂载到本地文件系统中,您能够像操作本地文件一样操作OSS的对象(Object),实现数据的共享. 使用限制 ossfs使用 ...
- 学Redis
Redis 简介 Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key - value 数据库 Redis 与 其他 key - value 缓存产品有以下三个特点: Redis ...
- 使用log4Net输出调试信息
在上一篇搭建服务器端的项目基础上,使用log4Net进行调试信息输出 http://www.cnblogs.com/fzxiaoyi/p/8439769.html 1.先分析下Photo 自带的服务器 ...
- 2016 ACM/ICPC亚洲区沈阳站
A B C D E F G H I J K L M O O O $\varnothing$ $\varnothing$ $\varnothing$ $\varnothing$ $\varnothi ...
- XIX Open Cup named after E.V. Pankratiev. Grand Prix of Eurasia, Division 1.
A 签到. C 源点向每个软件连边.把每个软件拆成对应版本数个点,每个软件向版本连边.把每个conflict也看成一个点.每个版本向它对应的conflict连边,conflict向汇点连边.没有在co ...
- 排序算法-插入排序(Java)
package com.rao.linkList; import java.util.Arrays; /** * @author Srao * @className InsertSort * @dat ...
- 最全BT磁力搜索引擎索引(整理分享,不断更新...)
最全BT磁力搜索引擎索引(整理分享,不断更新...) btkitty:http://cnbtkitty.com/(知名的BT磁力搜索,资源很多) idope.se:https://idope.se/( ...
- java 多态(向上转型)
多态的定义与使用格式 多态的定义格式:就是父类的引用变量指向子类对象 父类类型 变量名 = new 子类类型(); 变量名.方法名(); 普通类多态定义的格式 父类 变量名 = new 子类(); ...