iOS经典错误library not found for -lXXX
开发中经常会和ibrary not found for -xxx
打交道,尤其是我们从远程仓库或者github clone下来一个项目,编译很有可能报这个错误。如下图:
![](https://static.oschina.net/uploads/img/201709/10011713_z3Lb.png)
library not found for -lXXX 属于iOS经典错误之一。下面我们通过复现这个错误的方式来说明这个错误的解决方法。其中l是lib(library)的意思。
首先声明,我的工程中引用了友盟的统计SDK,名称叫做libMobClickLibrary.a
。存储在 third_party目录下,如下图(左图为libMobClickLibrary.a在工程目录/虚拟目录的位置,右图为libMobClickLibrary.a在磁盘目录/物理目录的位置):
![](https://static.oschina.net/uploads/img/201709/10011713_9hY3.png)
![](https://static.oschina.net/uploads/img/201709/10011713_d6KH.png)
没有配置Library Search Paths导致报错
(1)删除building setting -> Library Search Paths
下的 $(PROJECT_DIR)/YunFu/third_party/UMAnalytics
。如下图:
那么,你可能会问,为什么要删除这个路径而不是其他的路径呢?因为我知道这个路径就是libMobClickLibrary.a静态库的目录。
![](https://static.oschina.net/uploads/img/201709/10011715_HQUG.png)
(2)command + B编译项目,然后不出所料,我们会遇到下面这个错误:
![](https://static.oschina.net/uploads/img/201709/10011715_faXO.png)
(3)点开这个错误,然后就能看到这个经典错误,如下图:
这个错误的意思是找不到名字叫做 MobClickLibrary的库。
![](https://static.oschina.net/uploads/img/201709/10011715_g6yO.png)
至此,我们可知,就因为我们在Library Search Paths下删除了$(PROJECT_DIR)/YunFu/third_party/UMAnalytics 导致报这个library not found for -lMobClickLibrary的错误。所以下次遇到同类问题,我们便可知道某个静态库的路径可能没有配置。
结论一:没有配置静态库的search路径导致出现library not found for lXXX。
注意:设置的路径必须是静态库在磁盘下的路径(物理目录),不能设置为项目的虚拟目录。拿此例来说,libMobClickLibrary.a的在项目中是放在third_party文件夹下的,而其真正的磁盘路径是third_party下的UMAnalytics文件夹。
没有正确配置Library Search Paths导致报错
上面的情况是,我们没有配置某个静态库的路径会导致library not found for lXXX错误。而有时候,我们确实在Library Search Paths下配置了静态库路径,却依然报同样错误。此时我们就要考虑,这个路径配置的到底对不对。如下图(分别是libMobClickLibrary.a正确的路径和错误的路径):
正确路径:
![](https://static.oschina.net/uploads/img/201709/10011715_AMvG.png)
错误路径(去掉了最后一级目录"/UMAnalytics"):
![](https://static.oschina.net/uploads/img/201709/10011716_jzSu.png)
编译项目依然会报同样的错误library not found for -lMobClickLibrary.a,如下图:
![](https://static.oschina.net/uploads/img/201709/10011716_OkWl.png)
归根到底,原因在于,我们虽然跟他指定了libMobClickLibrary.a的目录,但是在所指定的目录下没有搜索到静态库libMobClickLibrary.a。此时又分为两种情况:
情况一:如果我们指定的目录和静态库libMobClickLibrary.a的目录完全不相关,那么需要重新到Library Search Paths下设置(注意:设置的是静态库的磁盘路径)。
情况二:如果我们指定的目录和静态库的目录有关系。即,我们指定的目录是静态库所在目录的上级目录,或者是上上级目录。这种情况下,无需指定静态库的精确的路径,只需要把non-recursive选项修改为recursive即可。如下图:
设置recursive
因为recursive选项代表在我们指定的目录下递归搜索静态库。即,如果在当前目录没有搜索到静态库,那么就去当前目录的子目录下继续搜索。默认情况下是non-recursive(非递归)的。
结论二:虽然Library Search Paths 中配置了静态库的search路径。但是没有正确配置而导致出现library not found for lXXX。
导入第三方framework静态库编译报错xxx.h file not found
上面讲的是当我们项目导入的是.a静态库,但因为没有在 Library Search Paths 中配置.a静态库的search路径,或者是虽然配置了路径但是路径配置错误而导致出现library not found for -xxx错误的解决办法。
但我们知道,在iOS中,静态库有两种形式:.a格式的静态库和.framework格式的静态库。
那么如果我们的项目中引入了.framework格式的静态库要不要配置search路径呢?答案是肯定的,无论我们以什么方式导入.framework静态库(cocoapods的方式或者直接把framework静态库拖拽到项目中的方式),如果没有配置framework的search路径,同样会报错,但报的错误却是和.a格式的静态库有些不同,如果我们项目中引入了framework格式静态库也使用了静态库(所谓使用就是import了framework静态库中的某个头文件),但没有配置search路径,那么就会报 xxx.h file not found 这类错误。如下图:
![](https://static.oschina.net/uploads/img/201709/10011717_oAbX.png)
因为我的项目中引入了一个叫做PushCenterSDK.framework的静态库。同时也使用了这个静态库中的某个API。如下图所示,分别是静态库在项目中的路径和磁盘路径:
![](https://static.oschina.net/uploads/img/201709/10011717_KxES.png)
![](https://static.oschina.net/uploads/img/201709/10011717_r6Zh.png)
我们依然采用复现问题的方式来验证解决错误的方法,首先,我的项目是可以编译通过的,然后尝试在build setting -> Framework Search Paths 下删除PushCenterSDK.framework的搜索路径(磁盘路径),下图分别是删除前和删除后的截图:
删除前:
![](https://static.oschina.net/uploads/img/201709/10011718_839B.png)
删除后:
![](https://static.oschina.net/uploads/img/201709/10011718_RgyH.png)
删除路径之后编译项目,发现出现了如下错误XXX.h file not found, 如下图:
很显然,没有找到PushCenterSDK 下的TBSDKPushCenterEngine.h文件。
![](https://static.oschina.net/uploads/img/201709/10011719_oz8C.png)
综上,framework静态库的路径也是必须的,如果项目中的framework静态库的路径配置错误或者没有配置就会报错 xxx.h file not found 类似错误。下次遇到这类错误,便可以从framework search paths 着手思考。
同样,framework静态库的搜索路径也支持递归搜索,我们不必配置一个精确无误的路径,可以指定一个父级目录,然后选择 recursive。
结论:无论我们以什么方式导入.framework静态库(cocoapods的方式或者直接把framework静态库拖拽到项目中的方式),如果没有配置framework的search路径,同样会报错,但报的错误却是和.a格式的静态库有些不同,如果我们项目中引入了framework格式静态库也使用了静态库(所谓使用就是import了framework静态库中的某个头文件),但没有配置search路径,那么就会报 xxx.h file not found 这类错误
文/VV木公子(简书作者)
PS:如非特别说明,所有文章均为原创作品,著作权归作者所有,转载请联系作者获得授权,并注明出处,所有打赏均归本人所有!
如果您是iOS开发者,或者对本篇文章感兴趣,请关注本人,后续会更新更多相关文章!敬请期待!
转载于:https://my.oschina.net/u/3579120/blog/1533270
iOS经典错误library not found for -lXXX相关推荐
- IOS开发错误library not found for -lXXX
最近在使用ReactNative技术搭建新项目的过程中,在集成神策分析时,在进行IOS端配置的时候Xcode进行build项目的时候遇到如下报错:library not found for -lRNS ...
- 李洪强iOS经典面试题144-数据存储
李洪强iOS经典面试题144-数据存储 数据存储 sqlite中插入特殊字符的方法和接收到处理方法. 除'其他的都是在特殊字符前面加"/",而 ' -> '' .方法:k ...
- 李洪强iOS经典面试题153- 补充
李洪强iOS经典面试题153- 补充 补充 有空就来解决几个问题,已经懒癌晚期没救了... UML 统一建模语言(UML,UnifiedModelingLanguage)是面向对象软件的标准化建模 ...
- 初学rpa的十大经典错误及解决办法_Python3之十大经典错误及其解决办法
作者 | 严小样儿 来源 | 统计与数据分析实战 接触了很多Python爱好者,有初学者,亦有转行人.不论大家学习Python的目的是什么,总之,学习Python前期写出来的代码不报错就是极好的.下面 ...
- MySQL数据库“十宗罪”(十大经典错误案例)
各位技术老铁们,福利来了!今天给大家说说<数据库中十大经典错误案例> 老张我在刚开始学习数据库的时候,没少走弯路.经常会遇到各种稀奇古怪的 error 信息,遇到报错会很慌张,急需一个解决 ...
- MYSQL数据库VALUES_MySQL数据库“十宗罪”(十大经典错误案例)
每天给你诚意满满的干货 来自:51CTO(作者:superZS) 原文链接:http://blog.51cto.com/sumongodb/1949426 今天给大家说说<数据库中十大经典错误案 ...
- 【Python基础】Python3十大经典错误及解决办法
◆ ◆ ◆ ◆ ◆ 接触了很多Python爱好者,有初学者,亦有转行人.不论大家学习Python的目的是什么,总之,学习Python前期写出来的代码不报错就是极好的.下面,严小样儿为大家罗列出Pyt ...
- 李洪强iOS经典面试题36-简单介绍 ARC 以及 ARC 实现的原理
李洪强iOS经典面试题36-简单介绍 ARC 以及 ARC 实现的原理 问题 简单介绍 ARC 以及 ARC 实现的原理. 考查点 ARC 是苹果在 WWDC 2011 提出来的技术,因此很多新入行的 ...
- unity消息队列判断字符串相等有错误_Python3十大经典错误及解决办法
◆ ◆ ◆ ◆ ◆ 接触了很多Python爱好者,有初学者,亦有转行人.不论大家学习Python的目的是什么,总之,学习Python前期写出来的代码不报错就是极好的.下面,严小样儿为大家罗列出Pyt ...
最新文章
- 多项式回归、分位数回归(Quantile Regression)、保序回归(Isotonic Regression)、RANSAC回归、核岭回归、基准回归模型(baseline)
- pycharm如何折叠指定代码而不是某一个函数或类或功能块
- python中sys.stdout、sys.stdin
- 自己动手写C语言编译器(4)
- 说出一些数据库优化方面的经验?
- iangularjs 模板_AngularJS中的模板安全与作用域绑定
- 《敏捷迭代开发:管理者指南》—第2章2.14节推荐读物
- 顺利达成微软HacktoberFest 2018
- PAT Basic 1002
- C++学习之路 | PTA乙级—— 1010 一元多项式求导 (25分)(精简)
- Mysql 查询本周的数据
- 几何基础,多种矩阵的学习,世界坐标到屏幕坐标的两种转换方法,三种绘制方框的原理,hookd3d,hookopengl,骨骼透视,主播的秘密,FPS各种BT功能的原理 和检测对抗原理,UE4引擎,U3D
- 论文查重究竟查的是什么?其核心算法是怎样的?
- 微信域名防封的3种方案
- IDEA复制文件名快捷键设置
- 浅述Docker的容器编排
- 计算机开机进不去桌面,电脑开机进不了桌面,怎么破?
- css公共样式插入音乐,【超全】常用的css公共样式
- ROS下安装和运行SVO数据包和实时测验的过程记录
- Android仿简书、淘宝等APP View弹出效果
热门文章
- 数据类型_function_函数概论
- linux常用命令:文本编辑
- 将加密的ppt文档解密,使之可以编辑
- x123.fun gf.php,hao123网址源码下载,hao123源码php版带后台 v2.1
- Ubuntu 17.10安装搜狗拼音输入法
- eclipse 关闭英文拼写检查,关闭xml验证
- 关于取整符号(二叉树具有n个结点的m次树的最小高度⌈logₘ(n(m-1)+1)⌉)
- 【Ubuntu】 解决中文输入问题 --- 安装搜狗拼音输入法
- 酒桌小游戏喝酒小程序
- HDMI、AV音视频端子介绍