我正在使用 Android NDK,由于它目前不支持 STL,我想知道是否有任何优秀的人在这方面取得了成功,或者知道哪个更适合 Android 平台:uSTL 或STL端口。
编辑:
看起来另一个选项可能是 CrystaX .NET .
从他们的网站:
...customized distribution of Android NDK r3 which I have rebuilt from official sources. Support of C++ exceptions, RTTI and Standard C++ Library added.
最佳答案
STL的端口正式可在 Android NDK 版本 r5 中使用上。
它可以用作静态库或共享库。 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 包中的文档位于以下位置(可能还有更多):
下载 NDK + 文档 here ;文件错误 here
以下是 docs/CPLUSPLUS-SUPPORT.html 的摘录(来自 NDK 文档,r5)
三、选择 C++ 标准库实现:
默认情况下,最小 C++ 运行时系统的头文件和库
库 (/system/lib/libstdc++.so) 在构建 C++ 源时使用。
但是,您可以通过设置变量来选择不同的实现
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.
警告:重要警告结束
如果您有多个共享库,则首选“STLport_shared”
使用 C++ STL 的项目,因为它避免了函数的重复
更重要的是每个变量中的全局变量(例如 std::cout)
他们,这可能会产生令人惊讶的结果。
另一方面,您必须在启动时明确加载它
应用程序,如下例所示:
static {
System.loadLibrary("stlport_shared");
System.loadLibrary("foo");
System.loadLibrary("bar");
}
“libfoo.so”和“libbar.so”都依赖于“libSTLport_shared.so”。
注意共享库的名称如果是“libSTLport_shared.so”来避免
与某些 Android 系统镜像的命名冲突,其中包括
系统级 libSTLport.so(恰好不是 ABI-stable 和
不能从 NDK 生成的机器代码中使用)。
如果您的共享库中只有一个共享库,则首选“STLport_static”
项目:只有您实际需要的 STL 函数和变量
链接到你的机器代码,减少它的代码大小,你不需要
在启动时加载动态 STLport_shared。
四。 STLport 特定问题:
此 NDK 为 STLport 提供预构建的静态和共享库,
但是您可以通过定义以下内容来强制从源代码重建它
在构建之前在您的环境或 Application.mk 中:
STLPORT_FORCE_REBUILD := true
STLport 在 BSD 风格的开源许可下获得许可。看
sources/cxx-STL/STLport/README 以获取有关该库的更多详细信息。
五、 future 计划:
关于c++ - 适用于 Android 的 uSTL 或 STLPort?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1650963/