Quantcast
Channel: Sam的技术Blog
Viewing all articles
Browse latest Browse all 158

Android NDK学习  NDK一些新特性

$
0
0
作者: Sam (甄峰)  sam_code@hotmail.com

从2012年最初接触NDK到现在已经5年过去了,从最初的NDK R7到现在已经到达NDK R14.  它本身也发生了很多变化。 例如对C++支持程度。对64bit ARM的支持等。现有必要把这些新特性研究一下。

1. 32bit/64bit ARM平台支持:
在NDK R10的某个版本中,开始支持64bit ARM平台。那时它还是将64bit和32bit NDK分开提供的。
当前Google支持下载的NDK中,最低版本是NDK R10e. 这个版本之后,64bit和32bit采用同一套NDK,只使用编译选项的不同来支持目标代码编译为何种平台。


Instruction Set(s) Notes
armeabi ARMV5TE and later
Thumb-1
No hard float.
armeabi-v7a armeabi
Thumb-2
VFPv3-D16
other optional
Hard float when specified as armeabi-v7a-hard.
Incompatible with ARMv5, v6 devices.
arm64-v8a AArch-64
x86 x86 (IA-32)
MMX
SSE/2/3
SSSE3
No support for MOVBE or SSE4.
x86_64 x86-64
MMX
SSE/2/3
SSSE3
SSE4.1, 4.2
POPCNT

mips MIPS32r1 and later Hard float.
mips 64 MIPS64r6


可以看到,只要在Application.mk中,切换:

#APP_ABI := armeabi-v7a
APP_ABI := arm64-v8a
即可选择64Bit或32Bit。 在代码中,如何区分32Bit和64Bit,可以使用
#ifdef __aarch64__
printf("\nThis is 64bit\n");
#else
printf("\nThis is 32Bit\n");
#endif



2. Clang和GCC:
从NDK R10开始支持clang. 但GCC还作为缺省编译器。
在之后的版本中,clang成为缺省编译器。

clang: 
NDK_TOOLCHAIN_VERSION=clang
指出由clang编译。 

GCC:
#NDK_TOOLCHAIN_VERSION=clang
NDK_TOOLCHAIN_VERSION=4.9



注1:Clang:
Clang是一个C语言C++Objective-C、Objective-C++语言的轻量级编译器源代码发布于BSD协议下.
GCC采用GPLv3. 导致大量芯片厂商更愿意转投Clang+llvm.

注2:
GPLv3争议,Linus对它的评价:
GPL,是GNU General Public License的缩写,是GNU通用公共授权非正式的中文翻译。它并非由自由软件基金会所发表,亦非使用GNU通用公共授权的软件的法定发布条款─只有GNU通用公共授权英文原文的版本始具有此等效力。

嗯我喜歡版本 2 的那些理由,並且我仍然覺得版本 2 是一個非常棒的協議, 理由是:「我給你源代碼,你給我你對它的修改,我們就扯平了」 對吧?這是我用 GPL 版本 2 的理由,就是這麼簡單
然後版本 3 的擴展在某些方面讓我個人覺得非常不舒服,也就是說「我給你源代碼, 這意味着你必須服從我的一些規則,否則你不能把它用在你的設備上。」 對我來說,這是違反了版本 2 協議所追求的所有目的






 

Viewing all articles
Browse latest Browse all 158

Trending Articles