android ndk 用什么工具

如上面所说

首先需要确定目标机器的指令集。
如果是 x86 的机器,用 x86-4.4.3 版本的工具链;如果是 arm 指令的,用 arm-linux-androideabi-4.4.3 版本 (x86-4.4.3 和 arm-linux-androideabi-4.4.3 位于ndk目录中)
1、gcc 的sysroot 选项
sysroot 选项设定 gcc 在编译源码的时候,寻找头文件和库文件的根目录。可以这样调用 gcc --sysroot=/tmp/gcc-arm (及其他选项)。NDK 根目录下的 platforms 目录中的各个子目录的路径都可以直接传给 gcc --sysroot=<dir>。为了简化操作,可以在linux系统的命令终端执行以下命令,设置SYSROOT环境变量,$NDK是ndk的根目录。
$ SYSROOT=$NDK/platforms/android-8/arch-arm
2、调用 NDK gcc(第1种方法)。 设置 SYSROOT之后,要把它传给 gcc 的 --sysroot 选项。由于unix/linux自带的gcc并非交叉编译工具,而我们需要使用的是ndk中提供的交叉编译工具(也是gcc),所以需要想办法让编译脚本找到ndk中的gcc,而不要去寻找系统中的gcc。而 unix/linux 系统的编译脚本常常会用 CC 环境变量来引用编译器,所以通过把 CC 设置为ndk中的gcc的路径,就能帮助编译脚本找到正确的gcc(我们还能顺便加上--sysroot选项)。
将CC 按如下设置
$ export CC="$NDK/toolchains/<name>/prebuilt/<host-system>/bin/<prefix>gcc --sysroot=$SYSROOT"
$ $CC -o foo.o -c foo.c (不必执行这一行,这条命令是调用gcc编译程序)
上面第1行之后之后,再去执行./configure 就可以编译出arm程序了。不过还需要考虑共享库的链接问题,要确保该程序没有链接ndk未提供的共享库。该方法的缺陷就是,不能使用 C++ STL(STLport 或 GNU libstdc++ ),也不能使用异常机制和RTTI。
3、调用NDK编译器(第2种方法,更简单)
android ndk 提供脚本,允许自己定制一套工具链。例如:
$NDK/build/tools/make-standalone-toolchain.sh --platform=android-5 --install-dir=/tmp/my-android-toolchain [ --arch=x86 ]
将会在/tmp/my-android-toolchain 中创建 sysroot 环境和 工具链。--arch 选项选择目标程序的指令架构,默认是为 arm。
如果不加 --install-dir 选项,则会创建 /tmp/ndk/<toolchain-name>.tar.bz2。
(执行 make-standalone-toolchain.sh --help 查看帮助。)
运行之后,这样使用:
$ export PATH=/tmp/my-android-toolchain/bin:$PATH
$ export CC=arm-linux-androideabi-gcc
$ export CXX=arm-linux-androideabi-g++
$ export CXXFLAGS="-lstdc++"
执行完以上设置环境变量的命令之后,就可以直接编译了(例如,执行 ./configure 然后 make 得到的就是 arm 程序了)。不用再设定 sysroot, CC 了。而且,可以使用 STL,异常,RTTI。
4、ABI 兼容性
ndk 同时支持 arm5 和 arm7,一般只用 arm5就好了。arm7是高端一点的,NDK 默认也是 arm5 。
推荐加上 -mthumb 选项给gcc,来生成 16-bit Thumb-1 指令。
如果要用 arm7,可以设定 CFLAGS='-march=armv7-a -mfloat-abi=softfp', 使用 Thumb-2 指令,且这两个选项不能分开!
5、警告 & 限制
5.1 Windows支持
Windows 上的NDK 工具链不依赖 Cygwin,因而速度比用 Cygwin 快一点,但是这些工具不能理解
Cygwin 的路径名(例如, /cygdrive/c/foo/bar)。只能理解 C: /cygdrive/c/foo/bar 这类路径
不过,NDK 提供的build工具能够很好地应对上述问题(ndk-build)
5.2 wchar_t 支持
wchar_t 类型仅从 Android 2.3 开始支持。
在 android-9 上, wchar_t 是 4字节。 并且 C语言库提供支持宽字符的函数
(例外:multi-byte 编码/解码 函数 和 wsprintf/wsscanf )
在android-9 以前的平台上,wchar_t 是1字节,而且宽字符函数不起作用。
建议不使用 wchar_t,提供 wchar_t 支持是为了方便移植以前的代码。
5.3 异常, RTTI 和 STL
NDK 工具链默认支持C++异常和RTTI(Run Time Type Information),可以用 -fno-exception 和 -fno-rtti 关闭(生成的机器码更小)
注意: 如果要用这两个特性,需要显式链接 libsupc++。例如: arm-linux-androideabi-g++ .... -lsupc++
NDK 提供了 libstdc++,因而可以用 STL,但需要显式链接 libstdc++ ( gcc ... -lstdc++)。不过在将来可以不用手动指定这个链接参数。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-11-09
as
第2个回答  2017-11-13
as
如何在命令行下使用Android NDK交叉编译工具
在命令行下使用Android NDK交叉编译工具的步骤如下:定义相关目录:设置NDK根目录:bashexport NDKROOT=\/opt\/android\/androidndkr10 # 请根据实际安装路径修改 设置系统根目录:bashexport SYSROOT=$NDKROOT\/platforms\/android19\/archarm # 根据目标Android API

android ndk的理解
NDK,即Native Development Kit,是一系列工具的集合,这些工具包括但不限于编译器、调试器、库文件等。它不仅提供了编译原生代码的能力,还包含了必要的头文件、构建系统等,使得开发者能够更方便地进行原生开发。交叉编译能力:NDK的一个重要特性是交叉编译。这意味着开发者可以在自己的开发机器(通常是PC...

android ndk是什么
Android NDK是Android平台提供的一套开发工具集,允许开发者使用C\/C++等本地语言进行Android应用的开发。主要功能与作用包括: 提供编译工具链:NDK包含编译器、调试器、构建工具等,用于将C\/C++代码编译成可在Android设备上运行的本地库。 实现高效操作:开发者可以在Java或Kotlin等语言中调用这些本地库,...

什么是Android NDK 什么情况下使用Android NDK
Android NDK是一种允许开发者使用本地代码语言来开发Android应用的工具集。它使得开发者能够充分利用本地代码的优势,并在某些情况下加速代码的执行。在以下情况下可以考虑使用Android NDK:应用具有独立性:如果你的应用是独立的,不依赖于其他应用或库,使用NDK可能是一个合适的选择。这可以避免因依赖关系...

androidndk是什么
Android NDK(Native Development Kit)是用于安卓手机软件开发的一个工具集,但它与SDK(Software Development Kit)在开发语言和用途上存在显著差异。一、开发语言 NDK:主要使用C语言进行开发。C语言作为一种底层编程语言,能够直接与硬件进行交互,这使得NDK非常适合用于开发需要直接与硬件对话的应用,如驱动...

androidndk是什么文件
Android NDK(Native Development Kit)是一套用于Android开发的工具集,而非单个文件。它允许开发者使用C和C++语言编写原生代码,并将这些代码集成到Android应用中。以下是关于Android NDK的详细解答:一、Android NDK的组成 头文件:这些文件包含了C和C++语言的API,使得开发者能够访问Android的底层功能。这些...

android ndk是什么
Android是安卓系统的简称,NDK是原生开发工具包的简称,它允许开发人员使用C\/C++等语言编写部分代码,以提高应用性能。Android应用通常运行在Dalvik虚拟机上,而NDK则提供了一系列工具和库文件,使得开发者能够编写并嵌入原生代码,从而实现更高效的程序。NDK的具体功能包括:生成原生代码库所需的工具及build...

ndk是什么
NDK是Native Development Kit的缩写。NDK是Android开发中的一个重要工具,它允许开发者在Android平台上使用C\/C++等本地语言编写代码,进而实现高性能和高效率的底层功能。详细解释如下:一、NDK的基本定义 NDK是Native Development Kit的缩写,它是Android平台提供的一套开发工具包。通过NDK,开发者可以编写出...

Android NDK-Build
Android NDK的用途在于整合C\/C++代码到Android应用中,其支持三种构建模式。其中,ndk-build基于GNU Make底层实现,是构建项目的主要方式。在使用ndk-build时,需要配置两个关键文件:Android.mk和Application.mk。Android.mk文件实质上是GNU Makefile,用于描述源文件、共享库等构建信息。需参考官方文档获取...

android studio ndk-build 编译C生成.so文件(ndk基础篇),看完你就懂...
生成JNI头文件:使用javah工具生成JNI头文件。需要正确指定类路径和生成目录。创建C文件并配置build.gradle:创建一个C文件,例如nativelib.c,在其中实现JNI函数。配置build.gradle文件,允许Java代码调用C代码。这通常涉及设置ndk路径和指定源文件。运行项目并验证:运行Android项目,验证C函数的调用是否成功。

相似回答