IOS运行报错 "dyld: Library not loaded" 原因分析

it2022-05-05  218

我们的游戏IOS版在接入易接SDK后,启动出现如下错误

dyld: Library not loaded: @rpath/OnlineAHelper.framework/OnlineAHelper Referenced from: /var/mobile/Containers/Bundle/Application/35ED2A71-7F60-4A16-BA4C-ECD6493A1EE1/yzg.app/yzg Reason: no suitable image found. Did find: /private/var/mobile/Containers/Bundle/Application/35ED2A71-7F60-4A16-BA4C-ECD6493A1EE1/yzg.app/Frameworks/OnlineAHelper.framework/OnlineAHelper: mmap() error 22 at address=0x0349E000, size=0x00014E70 segment=__LINKEDIT in Segment::map() mapping /private/var/mobile/Containers/Bundle/Application/35ED2A71-7F60-4A16-BA4C-ECD6493A1EE1/yzg.app/Frameworks/OnlineAHelper.framework/OnlineAHelper /private/var/mobile/Containers/Bundle/Application/35ED2A71-7F60-4A16-BA4C-ECD6493A1EE1/yzg.app/Frameworks/OnlineAHelper.framework/OnlineAHelper: mmap() error 22 at address=0x034C6000, size=0x00014E70 segment=__LINKEDIT in Segment::map() mapping /private/var/mobile/Containers/Bundle/Application/35ED2A71-7F60-4A16-BA4C-ECD6493A1EE1/yzg.app/Frameworks/OnlineAHelper.framework/OnlineAHelper   经过google后找到这个帖子  https://stackoverflow.com/questions/32730312/reason-no-suitable-image-found 里面给出了一些解决方法,包括清理缓存数据、重新安装证书等等。一开始我把这些方法几乎都尝试了一遍,但还是没有解决问题。   重新分析问题时,怀疑会不会是编译目标的CPU架构问题。我的测试机子是iPhone5s + iOS 9.2,编译目标架构选择了armv7  用file命令查看易接的库内容显示其包含了armv7和arm64两个版本。iPhone5s是arm64架构的CPU,于是重新编译选择了arm64,问题顺利解决。   错误原因: 32位的库在加载到64位的机子的iOS9系统后,32位的pagesize由之前的4096字节变成了16384字节,从而导致32位的APP加载的动态库不能在64位机子运行。   解决的方法有两种: 1.在动态库的工程中的other linker flags中加入 -Wl,-segalign,4000 2.将APP升级到支持arm64架构(这也是我们现在的做法)   相关链接:https://stackoverflow.com/questions/34707643/32-bit-app-with-dynamic-library-crash-on-64-bit-device

 

 

转载于:https://www.cnblogs.com/doublerain/p/9272293.html

相关资源:WL-002_H3C_WLAN系列产品与典型组网应用V2.5

最新回复(0)