And*_*son 31 c++ android android-ndk
我正在使用Android NDK,因为它目前不支持STL,我想知道是否有任何有这方面成功的人,或者知道哪个更适合Android平台:uSTL或STLPort的.
编辑:看起来另一种选择可能是CrystaX .NET.
从他们的网站:
...我从官方渠道重建的Android NDK r3的定制发行版.添加了对C++异常,RTTI和标准C++库的支持.
Sté*_*ane 33
STL的端口在Android NDK上正式提供,版本为r5.它既可以用作静态库,也可以用作共享库.NDK预构建了以下实现:
stlport_static
:如果项目中只有一个动态库,请使用.stlport_shared
:如果项目中有多个动态库,则使用.system
(静态库)在构建时使用它的推荐,简单方法是在Application.mk中定义APP_STL,如下所示:
APP_STL := stlport_static
Run Code Online (Sandbox Code Playgroud)
如果要重建它(这不是必需的),请在Application.mk中定义STLPORT_FORCE_REBUILD:
STLPORT_FORCE_REBUILD := true
Run Code Online (Sandbox Code Playgroud)
STLport的单元测试框架也可用.
STLport的当前限制:
wchar_t
和语言环境各种链接:
NDK包中的文档位于以下位置(可能还有更多):
以下摘自docs/CPLUSPLUS-SUPPORT.html(来自NDK docs,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.
警告:重要的CAVEAT
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.
Run Code Online (Sandbox Code Playgroud)
警告:重要的CAVEAT结束
如果您的项目中有多个使用C++ STL的共享库,则首选"stlport_shared",因为它避免了函数的重复,更重要的是避免了每个函数的全局变量(例如std :: cout),这可能会产生令人惊讶的结果.
另一方面,您必须在启动应用程序时明确加载它,如下例所示:
static {
System.loadLibrary("stlport_shared");
System.loadLibrary("foo");
System.loadLibrary("bar");
}
Run Code Online (Sandbox Code Playgroud)
"libfoo.so"和"libbar.so"都依赖于"libstlport_shared.so".
请注意共享库的名称,如果是"libstlport_shared.so",以避免与包含系统级libstlport.so的某些Android系统映像(与恰好不是ABI稳定且无法从NDK生成的机器代码中使用)发生命名冲突.
如果项目中只有一个共享库,则首选"stlport_static":只有实际需要的STL函数和变量将链接到您的机器代码,减少其代码大小,您不需要加载动态stlport_shared启动.
此NDK为STLport提供了预构建的静态和共享库,但您可以通过在构建之前在您的环境或Application.mk中定义以下内容来强制从源重建它:
STLPORT_FORCE_REBUILD := true
Run Code Online (Sandbox Code Playgroud)
STLport根据BSD风格的开源许可证授权.有关库的更多详细信息,请参阅sources/cxx-stl/stlport/README.
请注意,uSTL偏离了标准.例如,它假定std :: string的UTF-8编码.看起来仍然很有趣,但......
归档时间: |
|
查看次数: |
24536 次 |
最近记录: |