繁体   English   中英

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

[英]Where does libgnustl_shared.so come from? Why its size is different after I build?

我正在使用用于armeabi-v7a的NDK(r11b)构建适用于Android的库,并且发现了libgnustl_shared.so不同版本,并且无法理解原因。

  • 在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的工作室,我相信)与694ko一个libgnustl_shared.so部署它,我的代码开始在STL操作崩溃。 那些崩溃可能是由于与libgnustl_shared.so使用的不匹配引起的吗? 我们应该如何解决? (因为QtCreator不允许我使用libgnustl_shared.so的静态版本进行构建,我们到底应该使用哪个版本进行部署?)

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

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

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

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

那些崩溃可能是由于与libgnustl_shared.so使用的不匹配引起的吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM