Android libgnustl_shared.so来自哪里?为什么我建造后它的大小不同?

Android libgnustl_shared.so来自哪里?为什么我建造后它的大小不同?,android,c++,stl,android-ndk,qt-creator,Android,C++,Stl,Android Ndk,Qt Creator,我正在使用armeabi-v7a的NDK(r11b)为Android构建库,我发现了不同版本的libgnustl\u共享。所以,我不明白为什么 在ndk文件夹中(android-ndk-r11b\sources\cxx stl\gnu libstdc++\4.9\libs\armeabi-v7a\libgnustl_shared.so中),其大小为5593ko 在我使用ndk-build.cmd构建我的项目(一组库)之后,库(在libs\armeabi-v7a\libgnustl_shared

我正在使用armeabi-v7a的NDK(r11b)为Android构建库,我发现了不同版本的
libgnustl\u共享。所以
,我不明白为什么

  • 在ndk文件夹中(android-ndk-r11b\sources\cxx stl\gnu libstdc++\4.9\libs\armeabi-v7a\libgnustl_shared.so中),其大小为5593ko

  • 在我使用ndk-build.cmd构建我的项目(一组库)之后,库(在libs\armeabi-v7a\libgnustl_shared.so中)文件大小为694ko

  • 在我使用QtCreator构建我的项目(一组库)之后,库(在android build\libs\armeabi-v7a\libgnustl_shared.so中)文件大小是846ko。请注意,apk中打包的库(在android build\bin中)大小相同。还要注意它从中获取文件的QtCreator构建日志报告(android-ndk-r11b/sources/cxx stl/gnu libstdc++/4.9/libs/armeabi-v7a/libgnustl_shared.so)

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

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

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

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

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

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

这些崩溃可能是由于与libgnustl_shared.so used不匹配造成的吗


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

Thanx感谢您的帮助。你说
如果它们都来自r11,并且都是armeabi-v7a,那么它们应该兼容
,但是如果我们使用一个剥离到694ko,而QtCreator将一个剥离到846ko…可能694ko的一个缺少我的代码所需的一些符号…不是吗?这将使它们不兼容…使用原始文件(来自\android-ndk-r11b/sources/cxx stl/gnu libstdc++/4)是否安全。‌​9/libs/armeabi-v7a/l‌​ibgnustl_shared.so not stripped)以确保所有符号都存在?