V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yuyanstation
V2EX  ›  问与答

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

  •  
  •   yuyanstation · 2021-12-13 23:34:01 +08:00 · 720 次点击
    这是一个创建于 1066 天前的主题,其中的信息可能已经有所发展或是发生改变。
    之前做过一个小私活,要用到一个第三方的硬件设备,那边提供了几个 so 库,Android native 很久没做了,写了些逻辑完成功能后,用 ndk21 编译了在自己手机上跑了下没什么问题,就交给甲方了,结果在甲方的荣耀上只要调用第三方库的函数就会 crash ,一开始以为是 android 11 分区存储的问题,排查了下发现不是(顺便吐槽下,荣耀的 android11 居然完全取消了分区存储?那这 11 有啥意义。。。)。
    搞了一下午才想起可能是 ndk 版本不一致,看了下第三方库的 gcc 版本,确认用的是 ndk14 编译的,因为用了一些新特性,不想降级,看 logcat 是 libc++共享库的问题,我直接把 libc++_shared.so 替换成 ndk14 的版本,居然能正常跑了……
    结果过了一个月,荣耀系统更新了,又莫名其妙跑不了了……这回统一用 ndk14 编译,最终正常了。
    我其实疑惑的反倒不是为什么会 crash ,而是为什么除了荣耀以外的手机基本都能正常跑?有没有做 os 的大佬能解惑下。
    ysc3839
        1
    ysc3839  
       2021-12-14 09:10:37 +08:00 via Android
    可能是把什么 class 在多个版本的 libc 间使用了。如果每个库都只是在自己的范围内使用的话应该不会有问题的,具体得看代码才知道了。
    yuyanstation
        2
    yuyanstation  
    OP
       2021-12-14 16:58:37 +08:00
    @ysc3839 但是在有的 os 上跑完全没问题,就很奇怪。。。按道理应该都有问题吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1024 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:01 · PVG 04:01 · LAX 12:01 · JFK 15:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.