我正在使用 Android NDK,由于它目前不支持 STL,我想知道是否有任何优秀的人在这方面取得了成功,或者知道哪个更适合 Android 平台:uSTL 或STL端口。
编辑:看起来另一个选项可能是CrystaX .NET。
从他们的网站:
...我从官方来源重建的 Android NDK r3 的定制发行版。添加了对 C++ 异常、RTTI 和标准 C++ 库的支持。
我正在使用 Android NDK,由于它目前不支持 STL,我想知道是否有任何优秀的人在这方面取得了成功,或者知道哪个更适合 Android 平台:uSTL 或STL端口。
编辑:看起来另一个选项可能是CrystaX .NET。
从他们的网站:
...我从官方来源重建的 Android NDK r3 的定制发行版。添加了对 C++ 异常、RTTI 和标准 C++ 库的支持。
从版本 r5 开始,STL 端口在 Android NDK 中正式可用。它可以用作静态库或共享库。NDK 预构建了以下实现:
stlport_static
:如果您的项目中只有一个动态库,请使用。stlport_shared
:如果您的项目中有多个动态库,则使用此选项。system
(静态库)推荐的,在构建时使用它的简单方法是在 Application.mk 中定义 APP_STL,如下所示:
APP_STL := stlport_static
如果您想重建它(这不是必需的),请在 Application.mk 中定义 STLPORT_FORCE_REBUILD :
STLPORT_FORCE_REBUILD := true
STLport 的单元测试框架也可用。
STLport 的当前限制:
wchar_t
和语言环境中的“可能的错误”各种链接:
NDK 包中的文档位于以下位置(可能还有更多):
以下是 docs/CPLUSPLUS-SUPPORT.html 的摘录(来自 NDK 文档,r5)
默认情况下,构建 C++ 源代码时使用最小 C++ 运行时系统库 (/system/lib/libstdc++.so) 的头文件和库。
但是,您可以通过将变量 APP_STL 设置为 Application.mk 中的其他内容来选择不同的实现,例如:
APP_STL := stlport_static
选择此 NDK 提供的静态 STLport 实现。值 APP_STL 值如下:
system -> 使用默认的最小 C++ 运行时库。stlport_static -> 使用作为静态库构建的 STLport。stlport_shared -> 使用作为共享库构建的 STLport。
警告:重要警告
AT THE MOMENT, OUR STLPORT IMPLEMENTATION DOES NOT SUPPORT EXCEPTIONS
AND RTTI. PLEASE BE SURE TO NOT USE -fexceptions OR -frtti IN ALL
MODULES THAT USE IT.
警告:重要警告结束
如果您的项目中有多个使用 C++ STL 的共享库,则首选“stlport_shared”,因为它避免了函数的重复,更重要的是避免了每个函数中的全局变量(例如 std::cout),这可能会产生令人惊讶的结果.
另一方面,您必须在启动应用程序时显式加载它,如下例所示:
static {
System.loadLibrary("stlport_shared");
System.loadLibrary("foo");
System.loadLibrary("bar");
}
“libfoo.so”和“libbar.so”都依赖于“libstlport_shared.so”。
请注意共享库的名称 if "libstlport_shared.so" 以避免与某些包含系统级 libstlport.so 的 Android 系统映像发生命名冲突(它恰好不是 ABI 稳定的,并且不能从 NDK 生成的机器代码中使用) .
如果您的项目中只有一个共享库,则首选“stlport_static”:只有您实际需要的 STL 函数和变量将链接到您的机器代码,从而减少其代码大小,并且您无需加载动态 stlport_shared启动。
此 NDK 为 STLport 提供预构建的静态和共享库,但您可以通过在构建之前在您的环境或 Application.mk 中定义以下内容来强制从源重新构建它:
STLPORT_FORCE_REBUILD := true
STLport 在 BSD 风格的开源许可下获得许可。有关该库的更多详细信息,请参阅sources/cxx-stl/stlport/README。
请注意,uSTL 与标准有很大的偏差。例如,它假定 std::string 采用 UTF-8 编码。不过看起来还是挺有趣的……
现在从Android2.3开始支持STLport!!!
这就是我将 STLPort 配置为与 Android Froyo 一起使用的方式。
// The code
// The set of definitions and includes for STLPort
// They used defined() instead of #ifdef.
#define _STLP_HAS_INCLUDE_NEXT 1
#define _STLP_USE_MALLOC 1
#define _STLP_USE_NO_IOSTREAMS 1
#include <stl/config/_android.h>
#include <map>
#include <string>
// Android.mk
# For Android STL support
LOCAL_C_INCLUDES += external/stlport/stlport
LOCAL_SHARED_LIBRARIES += libstlport
安德鲁