• 关于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.
    
  • 相关阅读:
    leetcode 之Jump Game
    leetcode 之 Symmetric Tree
    leetcode 之 House Robber
    设计模式之建造者模式
    centos7 yum tab 补全
    设计模式之适配器模式
    设计模式之状态模式
    设计模式之外观模式
    设计模式之模板方法模式
    对以<uses-permission android:maxSdkVersion="xx" /> 中的说明
  • 原文地址:https://www.cnblogs.com/xiaoqiangink/p/12487378.html
Copyright © 2020-2023  润新知