zoukankan      html  css  js  c++  java
  • 关于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.
    
  • 相关阅读:
    造轮子 | 怎样设计一个面向协议的 iOS 网络请求库
    win7 激活码 秘钥
    python-pptx
    pycharm
    itop 环境
    Ubuntu上安装MongoDB(译)
    python之fabric(二):执行模式(转)
    python之fabric(一):环境env
    Windows下pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat
    vagrant系列教程(四):vagrant搭建redis与redis的监控程序redis-stat(转)
  • 原文地址:https://www.cnblogs.com/xiaoqiangink/p/12487378.html
Copyright © 2011-2022 走看看