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

Android ndk app_stl值与静态和共享构建android之间的关系,android-ndk,android-stlport,Android Ndk,Android Stlport,我一直在想,现在又困惑了 如果在Application.mk文件中设置了app_stl=stlport_static或stlport_shared,并且您正在尝试构建库的共享和静态版本。其效果是什么,为什么在android ndk应用程序中会有一个特定的案例(见下文) 假设我有 Case1: APP_STL=stlport_static and include $(BUILD_SHARED_LIBRARY) Case2: APP_STL=stlport_static and include $

我一直在想,现在又困惑了

如果在Application.mk文件中设置了app_stl=stlport_static或stlport_shared,并且您正在尝试构建库的共享和静态版本。其效果是什么,为什么在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:APP\u STL=stlport\u static和include$(构建共享库)
案例2:APP\u STL=stlport\u static和include$(BUILD\u static\u库)

如果您有两个或多个依赖于STLport的库,这两种配置(STLport的静态链接)可能会给您带来麻烦。因为有两个或多个库携带STLport的符号,所以您可能会违反

我相信这就是为什么
doc/CPLUSPLUS-SUPPORT.html
有:

二,。重要注意事项

二、 三,。静态运行时

请记住给定C++的静态库变量 运行时应仅链接到单个二进制文件,以实现最佳 条件

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

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