2

一直在想,现在很困惑。

当在 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 之间的区别,所以我擅长这部分。

4

1 回答 1

2

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

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

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

二、重要的考虑
...

二.3. 静态运行时
...

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

这意味着如果您的项目包含一个共享库,您可以链接到例如 stlport_static,并且一切都会正常工作。

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

于 2014-09-15T20:15:47.987 回答