代码之家  ›  专栏  ›  技术社区  ›  solidak GeminiYellow

Android NDK:第三方java库的静态或共享C++运行时

  •  2
  • solidak GeminiYellow  · 技术社区  · 6 年前

    我正在为Android编译一个使用JNI的第三方Java库。我阅读了有关添加C++支持的相关页面。开发者.android但我仍然困惑关于C++的STL运行时的一些问题,我希望我能在这里澄清:

    2如果我使用共享的C++运行时,使用ANDROIDUSTL = C++ +共享,它是保证STL中的特定元素使用LBC+++运行时还是可以使用GNUSTL(如果它不存在)?例如,如果我在一个有另一个gnustl\u static库的应用程序中使用std::string和一个共享的c++运行时(c++\u shared),那么我的std::string实现是来自libc++还是gnustl?

    理想情况下,我希望有一个非常精简的静态c++运行时版本(c++\u static),它只包括std::vector、std::string和std::map。实际上,我计划使用像这里描述的-ffunction部分和#768。

    请告知,谢谢。

    • 包装说明=安卓NDK
    • Android Studio=3.1.2版
    • 系统:cmake主机操作系统:Arch Linux($uname-r%4.18.5-arch1-1-Arch)
    • 编译程序:铿锵++
    • STL:c++\u静态/c++\u共享
    1 回复  |  直到 6 年前
        1
  •  3
  •   Alex Cohn    6 年前

    你的担心是真的。但如果处理得当,你可以找到一个强有力的出路。

    因此,为了达到最大的灵活性,您的库应该使用静态C++运行时。这可能会影响二进制文件的大小,但是如果如您所说,您只使用STL的有限子集,那么这个额外的部分将非常小。

    最重要的是,如果您使用 libc++_static .