一.概念
1.C标准函数库, 是所有目前符合标准的头文件(head file)的集合,以及常用的函数库实现程序, 几乎所有的 C 语言程序都是由标准函数库的函数来创建的.(C标准函数库所有平台通用,windows,android,Linux).
2.C++标准库(STL): C++中的标准程序库(简称标准库)是类库和函数的集合. 标准程序库提供若干泛型容器、函数对象、泛型字符串和流(包含交互和文件I/O),支持部分语言特性和常用的函数。来自C标准库的所有头文件,以另一个名称包含在C++标准中。将原名称移去“.h”并在开头处加上“c”作为新的名称。例如“time.h”改成“ctime”。C++标准库的头文件与C标准库的头文件的唯一区别是,函数位于std::命名空间(虽然很少编译器真正如此)。标准模板程序库是C++标准程序库的子集,包含容器、算法、迭代器、函数对象等(STL).
3.extern “C”,兼容C所做的声明。因为编译器对C/C++进行编译生成汇编代码时,其函数命名方式会不同,因此当在C++中调用C库的方法时会找不到对应用的函数.
4.NDK
静态库(BUILD_STATIC_LIBRARY):静态链接库,编译生成后以.a结尾的文件.当其它链接程序或库调用时,此静态链接库代码会被直接链接到目标程序中去(库A和B,A为静态链接库,B调用A,A中的代码会直接链接到B代码中)缺点使目标体积变大,当静态库产生改变后需重新编译.
共享库(动态链接库,BUILD_SHARED_LIBRARY):与静态库相对应,编译时不会将代码直接连接到目标程序中,单独存在,也使得不同模块或程序可以共享一个共同库文件。
参考: http://www.cnblogs.com/rainduck/p/3600472.html.
NDKC++支持:默认情况下提供功能非常有限的C++库(System C++,/system/lib/libstdc++),不包括
.StandardC++ Library support
.C++exceptions support
.RTTIsupport
当然,也有另外的一些选择
System(default) ->Use the default minimalsystem C++ runtime library
gabi++_static ->Use the GAbi++ runtime as a static library.
gabi++_shared -> Use the GAbi++ runtime as ashared library.
stlport_static -> Use the STLport runtime asa static library.
stlport_shared ->Use the STLport runtime as a shared library.
gnustl_static -> Use the GNU STL as astatic library.
gnustl_shared ->Use the GNU STL as a shared library.
这几种C++库支持如下:
| C++ Excepitons | C++ RTTI | Standard Library |
System | No | No | No |
Gabi++ | Yes | Yes | No |
Stlport | Yes | Yes | Yes |
Gnustl | Yes | Yes | Yes |
System库只提供很少的一部分StandardLibrary头文件,DNK默认情况下采用此C++ 库,
包含头文件有cassert cctype cerrno cfloat climits cmath csetjmp csignal cstddef
cstdint cstdio cstdlib cstring ctime cwcharnew stl_pair.h typeinfo
utility除此之外不支持,如std::string,std:vector.
Gabi.另一个C++库,提供的和System一样的文件,不同的是它支持RTTI.
Stlport :STLport(http://www.stlport.org)的Android 移植版。提供完整的C++ 标准库头文件,支持RTTI,但不支持EXCEPTIONS.
Gnustl:GNU 标准的C++library. 支持更多特性。库名叫:libgnustl_shared.so,而不是其它平台通常的:libstdC++.so(见NDK文档)