一直在想,现在很困惑。
当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之间的差异所以我很擅长那部分。
答案 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)两者都链接相同的静态 运行时,它们中的每一个都将包含运行时代码的副本 它的最终二进制图像。这是有问题的,因为某些全球性的 运行时内部使用/提供的变量是重复的。