使用Android NDK构建时隐藏gnustl_static中的符号

时间:2016-07-22 15:13:52

标签: android android-ndk shared-libraries static-libraries

我正在构建一个Android库,其中包含使用STL编写的本机部分,该部分隐藏在Java包装器下。在Static runtimes部分的NDK文档中,声明我应该使用共享运行时来避免多个静态运行时的问题,但我想尝试使用gnustl_static设置标志-fvisibility=hidden。 问题是,它是否会解决可能存在的问题,或者共享库是唯一的出路?

1 个答案:

答案 0 :(得分:0)

不,使用-fvisibility=hidden构建无助于将多个库链接到静态C ++运行库所产生的问题。

除非您自己构建gnustl_static,否则-fvisibility=hidden标记仅适用于依赖于gnustl_static的本机代码。它不会改变从gnustl_static导出符号的方式。

  

此外,如果您链​​接两个共享库 - 或共享库和   一个可执行文件 - 针对相同的静态运行时,最终的二进制图像   每个共享库的一部分包括运行时代码的副本。有   多个运行时代码实例是有问题的,因为   重复运行时使用的某些全局变量或   内部提供。

但是,只要您只创建一个共享库,链接到静态C ++运行时应该可以正常工作。

  

此问题不适用于包含单个共享的项目   图书馆。例如,您可以链接到stlport_static,并期望   你的应用程序行为正常。如果您的项目需要多个共享   库模块,我们建议您使用共享库变体   您的C ++运行时。