iOS常见错误library not found for -XXX

开发中经常会和ibrary not found for -xxx打交道,尤其是我们从远程仓库或者github clone下来一个项目,编译很有可能报这个错误。如下图:


报错信息

library not found for -lXXX 属于iOS经典错误之一。下面我们通过复现这个错误的方式来说明这个错误的解决方法。其中l是lib(library)的意思。

首先声明,我的工程中引用了友盟的统计SDK,名称叫做libMobClickLibrary.a。存储在 third_party目录下,如下图(左图为libMobClickLibrary.a在工程目录/虚拟目录的位置,右图为libMobClickLibrary.a在磁盘目录/物理目录的位置):

工程目录

磁盘目录

没有配置Library Search Paths导致报错

(1)删除building setting -> Library Search Paths下的 $(PROJECT_DIR)/YunFu/third_party/UMAnalytics。如下图:

那么,你可能会问,为什么要删除这个路径而不是其他的路径呢?因为我知道这个路径就是libMobClickLibrary.a静态库的目录。

(2)command + B编译项目,然后不出所料,我们会遇到下面这个错误:

(3)点开这个错误,然后就能看到这个经典错误,如下图:

这个错误的意思是找不到名字叫做 MobClickLibrary的库。

至此,我们可知,就因为我们在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正确的路径和错误的路径):

正确路径:

正确路径

错误路径(去掉了最后一级目录"/UMAnalytics"):

错误路径

编译项目依然会报同样的错误library not found for -lMobClickLibrary.a,如下图:

错误信息

归根到底,原因在于,我们虽然跟他指定了libMobClickLibrary.a的目录,但是在所指定的目录下没有搜索到静态库libMobClickLibrary.a。此时又分为两种情况:

情况一:如果我们指定的目录和静态库libMobClickLibrary.a的目录完全不相关,那么需要重新到Library Search Paths下设置(注意:设置的是静态库的磁盘路径)。

情况二:如果我们指定的目录和静态库的目录有关系。即,我们指定的目录是静态库所在目录的上级目录,或者是上上级目录。这种情况下,无需指定静态库的精确的路径,只需要把non-recursive选项修改为recursive即可。

结论:无论我们以什么方式导入.framework静态库(cocoapods的方式或者直接把framework静态库拖拽到项目中的方式),如果没有配置framework的search路径,同样会报错,但报的错误却是和.a格式的静态库有些不同,如果我们项目中引入了framework格式静态库也使用了静态库(所谓使用就是import了framework静态库中的某个头文件),但没有配置search路径,那么就会报 xxx.h file not found 这类错误

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 开发中经常会和ibrary not found for -xxx打交道,尤其是我们从远程仓库或者github cl...
    VV木公子阅读 47,281评论 17 76
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,973评论 19 139
  • IOS开发过程中这个问题很容易搞的很迷糊。今天来掰扯掰扯。问题及解决方法简单来说,这个问题分两个方面。错误如下,这...
    762683ff5d3d阅读 2,873评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,461评论 25 708
  • 我和妈妈已经一年没见面了 还有一个月就可以见到了 可是 在这之前我得先要考完试 外国文学和秘书写作 只有两科 可是...
    我和妈咪的故事阅读 275评论 0 0