libgnustl_shared.从何而来?为什么它的大小不同后,我建立



我正在使用NDK (r11b)为armeabi-v7a构建Android库,我发现libgnustl_shared.so的不同版本,不明白为什么。

  • 在ndk文件夹(在android-ndk-r11bsourcescxx-stlgnu-libstdc++4.9libsarmeabi-v7alibgnustl_share .so)中,其大小为5593ko

  • 在我使用ndk-build构建我的项目(一堆库)之后。cmd,库(在libsarmeabi-v7alibgnustl_shared.so)文件大小为694ko.

  • 使用QtCreator构建我的项目(一堆库)后,库(在android-buildlibsarmeabi-v7alibgnustl_shared.so)文件大小为846ko。请注意,打包在apk(在android-buildbin中)中的库具有相同的大小。还请注意,QtCreator构建日志报告它从(android-ndk-r11b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libgnustl_share .so)

  • 获取文件。

主要问题:为什么编译后的文件比原来的小?链接器/编译器是否在某些时候收缩文件(删除未使用的符号)?

附加问题:我终于用QtCreator构建了我的项目(最后使用libgnustl_shared。so of 846ko)并将我的so文件(但libgnustl_share .so)提供给其他人,他们将在自己的应用程序中集成它。在他部署了他的应用程序之后,他的IDE(我相信是Android studio)使用libgnustl_shared来部署它。所以694ko,我的代码在STL操作中开始崩溃。这些崩溃可能是由于与libgnustl_shared不匹配。所以使用?我们该如何解决这个问题?(因为QtCreator不允许我使用libgnustl_shared的静态版本进行构建。那么,我们最终应该使用哪个版本进行部署呢?

请注意,我的项目是用QtCreator编译的,但不使用Qt(我使用Qt从GUI测试我的库,但库本身根本不使用Qt)

为什么编译后的文件比原来的小?链接器/编译器是否在某些时候收缩文件(删除未使用的符号)?

是,共享库在安装到库输出目录后被剥离。NDK中的库没有被预剥离,因为这样做会阻止用户调试它们。

还要注意,对于r11和更早的版本,有两个armeabi-v7a库。您所指示的一个,以及"thumb"子目录中的另一个。实际上只使用了拇指键(这就是为什么在r12中删除了非拇指键)。

这些崩溃可能是由于libgnustl_shared不匹配。所以使用?

如果它们是libgnustl_shared的不同版本。所以(不是来自同一个NDK版本),是的,绝对是。如果它们都来自r11并且都是armeabi-v7a(拇指或非拇指),那么它们应该是兼容的。如果其中一个使用的是armeabi-v7a-hard版本的库(在r12中删除),那么这肯定也是一个问题。armeabi-v7a与armeabi的混合不太确定,但可能是一个问题。

最新更新