【问题标题】:Using GNU STL and C++11 with V8 on Android NDK在 Android NDK 上使用带有 V8 的 GNU STL 和 C++11
【发布时间】:2014-11-26 01:05:38
【问题描述】:

我正在使用 NDK 和 V8 在 Android 上构建应用程序。对于 shared_ptr 等功能,我更愿意使用 C++11 和 GNU STL;但是,V8 构建系统似乎被硬编码为使用 stlport_static 作为其 STL 变体。

即使patching the build system to generate a fully self-contained library,V8 的构建也不会静态地将 STLport 链接到它的 .a 文件中(这是意料之中的),因此我从 libv8_base.a 等中的未解析符号中得到数百个链接器错误。当我使用不同的 STL 变体时,我也看不到任何方法可以向 ndk-build 表明它应该链接到 stlport_static

在使用gnustl_static 时链接stlport_static 是否有合理的模式,或者更好的是,有没有办法针对gnustl_static 构建Android V8?

【问题讨论】:

  • 您的本机代码是直接与libjv8.so 对话,还是与它的静态库对话?还是你的 Java 加载了两个独立的共享库?
  • 我的本机代码与libv8_base.a 对话,libv8_base.a 依赖于stlport_static 库。我可以自己使用stlport_static,但我真的想要shared_ptr并在我的容器中正确移动语义......无论如何,我不是在构建v8的.so,因为那样不会'似乎甚至不是一种选择。
  • 现在在 AOSP 错误跟踪器中打开:Issue 216331: STLport does not support C++11

标签: android c++ c++11 android-ndk v8


【解决方案1】:

你有问题。好吧,在单独的 .so 中混合不同的 STL 是可能的,但要格外小心;但是在一个 .so 中使用两个 STL 是根本不可能的。

您要么需要实现自己的shared_ptr(没什么大不了的),但是对于存在于 gnustl 而不是 stlport。

或者你需要将 V8 移植到 gnustl(恐怕 MIT 许可证不允许这样做)。

【讨论】:

  • 看起来 gnustl 和 stlport 对它们的所有实现类都使用不同的内部符号,所以我看不出是什么让它们在 .so 中混合成为不可能的。但是 MIT 许可证和/或修改后的 GPL 中的什么内容禁止 V8 在 gnustl 中链接?这就是为什么V8只支持stlport?无论如何,看起来只是拉入boost::shared_ptr 会更容易,我希望避免这种情况,但是哦,好吧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 2012-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多