app_stl值与静态和共享构建android之间的关系

时间:2014-09-15 18:37:52

标签: android-ndk android-stlport

一直在想,现在很困惑。

当app.stl = stlport_static或stlport_shared在Application.mk文件中设置并且您正在尝试构建库的共享版本和静态版本时。有什么影响,为什么你的android ndk应用程序中会有一个特定的情况(见下文)?

让我说

Case1: APP_STL=stlport_static and include $(BUILD_SHARED_LIBRARY) 
Case2: APP_STL=stlport_static and include $(BUILD_STATIC_LIBRARY) 

Case3: APP_STL=stlport_shared and include $(BUILD_SHARED_LIBRARY) 
Case4: APP_STL=stlport_shared and include $(BUILD_STATIC_LIBRARY) 

我确实理解stlport和gnustl之间的差异所以我很擅长那部分。

1 个答案:

答案 0 :(得分:2)

  

案例1:APP_STL = stlport_static并包含$(BUILD_SHARED_LIBRARY)
  案例2:APP_STL = stlport_static并包含$(BUILD_STATIC_LIBRARY)

如果您有两个或更多依赖于STLport的库,这两个配置(STLport的静态链接)可能会让您遇到麻烦。由于两个或多个库携带STLport的符号,您可能会违反One Definition Rule

我相信doc/CPLUSPLUS-SUPPORT.html的原因:

  

II。重要考虑因素
  ...

     

II.3。静态运行时间   ...

     

请记住给定C ++的静态库变体   运行时只能连接到单个二进制文件中以获得最佳效果   条件。

     

这意味着如果您的项目包含单个共享   库,您可以链接到例如stlport_static和所有内容   会正常工作。

     

另一方面,如果项目中有两个共享库   (例如libfoo.so和libbar.so)两者都链接相同的静态   运行时,它们中的每一个都将包含运行时代码的副本   它的最终二进制图像。这是有问题的,因为某些全球性的   运行时内部使用/提供的变量是重复的。