多个 so 库混用不同 ndk 版本编译, libc++共享库版本也不一致,为什么有的手机能正常运行有的会 crash?

2021-12-13 23:34:01 +08:00
 yuyanstation
之前做过一个小私活,要用到一个第三方的硬件设备,那边提供了几个 so 库,Android native 很久没做了,写了些逻辑完成功能后,用 ndk21 编译了在自己手机上跑了下没什么问题,就交给甲方了,结果在甲方的荣耀上只要调用第三方库的函数就会 crash ,一开始以为是 android 11 分区存储的问题,排查了下发现不是(顺便吐槽下,荣耀的 android11 居然完全取消了分区存储?那这 11 有啥意义。。。)。
搞了一下午才想起可能是 ndk 版本不一致,看了下第三方库的 gcc 版本,确认用的是 ndk14 编译的,因为用了一些新特性,不想降级,看 logcat 是 libc++共享库的问题,我直接把 libc++_shared.so 替换成 ndk14 的版本,居然能正常跑了……
结果过了一个月,荣耀系统更新了,又莫名其妙跑不了了……这回统一用 ndk14 编译,最终正常了。
我其实疑惑的反倒不是为什么会 crash ,而是为什么除了荣耀以外的手机基本都能正常跑?有没有做 os 的大佬能解惑下。
699 次点击
所在节点    问与答
2 条回复
ysc3839
2021-12-14 09:10:37 +08:00
可能是把什么 class 在多个版本的 libc 间使用了。如果每个库都只是在自己的范围内使用的话应该不会有问题的,具体得看代码才知道了。
yuyanstation
2021-12-14 16:58:37 +08:00
@ysc3839 但是在有的 os 上跑完全没问题,就很奇怪。。。按道理应该都有问题吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/821990

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX