在 Android NDK(Native Development Kit)中,Android.mk
文件是用于定义编译本地代码(如 C/C++)的 Makefile 片段。其中,LOCAL_NDK_STL_VARIANT
是一个变量,用于指定在编译时使用的 STL(Standard Template Library)变体。
STL 是 C++ 标准库中的一个部分,它包含了很多有用的容器类(如 vector、list、map 等)、算法以及迭代器等。由于 Android 平台上的 STL 实现可能有所不同,因此 NDK 允许你通过 LOCAL_NDK_STL_VARIANT
变量来选择适合你的项目的 STL 变体。
LOCAL_NDK_STL_VARIANT
可以接受以下一些值(这些值可能会随着 NDK 版本的更新而有所变化,所以最好查阅你正在使用的 NDK 版本的文档):
none
:不使用 STL。这意味着你的代码将不会链接到任何 STL 实现。system
:使用系统提供的 STL 实现(如果有的话)。这通常意味着使用设备上的 libc++ 或 libstdc++。但是,请注意,不同的 Android 版本和不同的设备可能具有不同的 STL 实现,这可能导致兼容性问题。stlport_static
和stlport_shared
:使用 STLport STL 实现。STLport 是一个开源的 STL 实现,它可以作为静态库(stlport_static
)或共享库(stlport_shared
)链接到你的应用中。然而,从 NDK r10 开始,STLport 已经被弃用,并且在后续的版本中可能不再被支持。gnustl_static
和gnustl_shared
:使用 GNU STL 实现。这也是一个开源的 STL 实现,它提供了静态库(gnustl_static
)和共享库(gnustl_shared
)选项。但是,从 NDK r17c 开始,GNU STL 也被弃用,并在后续版本中不再被支持。c++_static
和c++_shared
:使用 libc++ STL 实现。libc++ 是 LLVM 项目的一部分,它是一个高度可移植的 C++ 标准库实现。它提供了静态库(c++_static
)和共享库(c++_shared
)选项。从 NDK r17c 开始,libc++ 成为了默认的 STL 实现。
请注意,选择正确的 STL 变体取决于你的项目需求、目标平台以及你希望如何处理 STL 实现的依赖性和大小。在选择 STL 变体时,务必考虑这些因素。