IOS运行报错 "dyld: Library not loaded" 原因分析
Posted doublerain
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS运行报错 "dyld: Library not loaded" 原因分析相关的知识,希望对你有一定的参考价值。
我们的游戏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
里面给出了一些解决方法,包括清理缓存数据、重新安装证书等等。一开始我把这些方法几乎都尝试了一遍,但还是没有解决问题。
重新分析问题时,怀疑会不会是编译目标的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架构(这也是我们现在的做法)
以上是关于IOS运行报错 "dyld: Library not loaded" 原因分析的主要内容,如果未能解决你的问题,请参考以下文章
iOS 报错信息: dyld: Library not loaded: @rpath/XCTest.framework/XCTest Referenced from
iOS 报错 : dyld: Library not loaded: @rpath/
[iOS Xcode8报错]dyld: Library not loaded: /System/Library/Frameworks/UserNotifications.framework/UserN
iOS dyld: Library not loaded crash问题
iOS 报错信息: dyld: Library not loaded: @rpath/XCTest.framework/XCTest Referenced from: