关于Xcode dyld: Library not loaded: image not found

今天新任务需要用到一个framework,但是build出来执行的时候一直报:dyld: Library not loaded

百度google尝试了N多方法都不work,果然一千人就有一千个哈姆雷特,没想到连问题都会这样。

解决方案:

首先,导致这个错误最直接的原因是,你没有在你的项目里面link你需要的library资源,确保你有做link的动作。

当link动作做了之后,如果还出现问题,那么我们先看错误提示,首先,要明确一点,为什么会提示rpath下的framwork not loaded?

看起来问题就是出在path的地方不match,我一开始有针对这个路径问题去尝试解决,但是都不work.

尝试 一:

  • 单纯设定framework search paths, build出来就直接报错,image not fond.

  • 尝试在general里面,选择framework将其改为embed witout signing.可以build,但是执行的时候依旧报错。

这样看起来问题是,我build出来的执行档执行期间run的path 跟我default设定的不一样,因为我一开始有嵌入framework所以它可以成功执行build出来。

尝试 二:

  • 单纯设定runpath search paths,发现报错,提示接口文件not found

让我万万没想到的是,当我尝试将run path search path 和 framework search path 均设定指定路径的时候,竟然可以build出来执行了,也不需要我一开始将framework 嵌入到project里的动作即可。

总结:

  1. 在使用静态库framework的时候,一定要设置Runpath search path 和Framework search path,这2个地方分别作用于:程序执行后(build出来执行),和执行前所load的环境(build所需要的环境),不管你是通过嵌入的方式让他可以build执行还是其他方法, 这2处地方的path 一定要设定。

  2. 在调用dylib的时候,也需要注意path的设定。一般我们会在Run Scipt里面做一个path 加载设定。脚本如下:

1. install_name_tool -change @rpath/xxx.dylib @executable_path/xxx.dylib $BUILT_PRODUCTS_DIR/$EXECUTABLE_PATH
2. manually copy xxx.dylib to the same directory where the CLI is.
posted @ 2020-03-13 16:37  萧蔷ink  阅读(2405)  评论(0编辑  收藏  举报