使用第三方动态库出现dyld: Library not loaded Reason: image not found

本文介绍了在iOS应用开发过程中遇到的动态库加载失败问题及其两种解决方案。首先可以通过设置弱引用(Optional)来解决编译时的报错,其次还可以通过在Embedded Binaries中添加动态库来彻底解决问题。

使用第三方动态库出现如下错误:

dyld: Library not loaded: @rpath/AipOcrSdk.framework/AipOcrSdk

Referenced from: /var/containers/Bundle/Application/C3E607DA-217A-4432-A035-F14FE1C79D45/MyTest.app/MyTestApp

Reason: image not found

第一种解决方法:

1、在Xcode中的Build Phases中的Copy Files项中,将你要引用的framework拖到“Linked

Frameworks and Libraries“中【如果已经添加了,跳过这一步】

2、把Build Phases 里Social.framework后边的选项修改成为Optional就可以了



上面这种方法使用的是弱引用(Optional)的方式

强引用(Required)的framework是一定会被加载到内存的,但是弱引用(Optional)的framework只在需要时才会被载入内存,这对于比较大的framework来说,在最初加载的时候会省很多时间。
简单解释一下,有一些库如Social.framework 和AdSupport.framework,是在iOS6之后才被引入的,还有一些更新了新特性的只能在iOS6+上可用。当你添加一个framework到你的工程里,他们被默认强引用(Required),然而,当你最终把程序配置在运行5.0的设备上时,你会发现它通不过最户的加载,原因就在于这些库是不被iOS5.0支持的,就需要我们把这些库的引用改为Optional.

第一种方式可以解决编译时的报错,但有时候我们在使用库里的方法时不能正确的执行。

第二种解决方法:

在Embedded Binaries点击“+”号,把动态库添加进来


在 macOS 系统中,当程序尝试加载动态库(dylib)时,如果 `dyld`(动态链接器)无法找到所需的库文件,会抛出类似 `dyld: Library not loaded: @rpath/libcurl.4.dylib` 的错误。这种问题通常与库路径配置、运行时链接器搜索路径或库本身的安装状态有关。 ### 1. 检查 libcurl.4.dylib 是否存在 首先确认系统中是否安装了 `libcurl.4.dylib`,可以通过以下命令查找: ```bash find /usr/local/lib /opt/local/lib -name "libcurl.4.dylib" ``` 如果没有找到,可能需要手动安装 libcurl 库,例如使用 Homebrew: ```bash brew install curl ``` ### 2. 配置 @rpath 路径 在 macOS 的动态链接机制中,`@rpath` 是一个运行时搜索路径(runtime search path),通常由链接器在构建时指定。如果程序依赖的库位于非标准路径中,可以通过 `install_name_tool` 修改库的路径。 例如,将可执行文件 `obs` 对 `libcurl.4.dylib` 的引用修改为绝对路径: ```bash install_name_tool -change @rpath/libcurl.4.dylib /usr/local/opt/curl/lib/libcurl.4.dylib ./obs ``` ### 3. 设置 DYLD_LIBRARY_PATH 在运行程序前,可以通过设置 `DYLD_LIBRARY_PATH` 环境变量来临时添加动态库搜索路径: ```bash export DYLD_LIBRARY_PATH=/usr/local/opt/curl/lib:$DYLD_LIBRARY_PATH ./obs ``` 此方法适用于调试,但不建议长期使用,因为它可能带来安全风险。 ### 4. 使用 otool 检查依赖库路径 使用 `otool -L` 可以查看可执行文件所依赖的动态库路径: ```bash otool -L ./obs ``` 输出示例如下: ``` @rpath/libcurl.4.dylib (compatibility version 7.0.0, current version 7.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1281.100.1) ``` 如果发现路径不正确,可以使用 `install_name_tool` 进行修正。 ### 5. 使用 Homebrew 安装依赖库 如果使用 Homebrew 管理库,可以尝试通过以下命令安装 libcurl 并确保其版本兼容: ```bash brew install curl brew link --force curl ``` ### 6. 重新构建项目并指定库路径 在构建项目时,可以通过 CMake 或 Xcode 设置正确的库搜索路径。例如,在 CMake 中可以指定: ```bash cmake -DCMAKE_PREFIX_PATH=/usr/local/opt/curl .. ``` 或在构建命令中添加链接器标志: ```bash -DCURL_LIBRARY=/usr/local/opt/curl/lib/libcurl.dylib ``` ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值