代码改变世界

IOS - 编译错误:linker command failed with exit code 1 (use -v to see invocation)同时警告:directory not found for option '-F...'/'-L...'

2015-08-26 08:26  HermitCarb  阅读(379)  评论(0编辑  收藏  举报

前几天码代码,编译时老是报错,提示“linker command failed with exit code 1 (use -v to see invocation)”。一贯发扬“我遇到的错误,别人一定也遇到过,并且网上一定会有”的精神,然后在网上搜了大半天(从下午3点到晚上8点),终于自己解决了。网上大部分说是添加第三方类库的问题,但我怎么改都不行,网上说的方法,就不赘述了,大致都一样,我不否认其可行性,但好像不适合我的情况。

 

下面来简述一下我的情况,我的项目里的文件夹命名是“单词”+“空格式”的,如自定义第三方的lib类库夹为“custom framework and lib”,计划把第三方的类库都放在里面。然后添加第三方类库时,就一直报错。果断谷歌百度,说是Search Path的问题,我一看:

    ...

    .../custom

    framework

    and

    lib/...

    ...

好多这个单词式的路径,还重复了好多。项目不是一个人写,也不敢乱动,只好拷贝一份实验。把所有的重复项删了,不行(行了才怪)。然后去项目里找上述路径明显没有。又回去看日志,发现上面单词式的路径都有警告:directory not found for option '-L...',接着继续谷歌百度,还是一无所得。

想了许久决定清空Search Path后重新添加一个第三方类库试试,然后Search Path里就多了上面四条路径。尝试删除多余项并手动改回正常路径:.../custom framework and lib/...,然后又是变为四条。

好吧,果断是空格的问题。想起原先另一项目里设置项目时遇到空格时前加反斜杠转义,果断试了试:

    .../custom\ framework\ and\ lib/...        即在正常路径中的每个空格前加一个反斜杠。但网上几乎没人提到过这种情况。

这次OK了。这时已经晚上8点了。...(T.T)...

 

如果你只是来解决问题,到这里就结束了。

 

 

下面我想说一下我的感受。

学习编程不能太懒,像这次错误,本来很好发现的,应该学会分析错误和警告日志。找不到第三方类库文件,然后复制一句“directory not found for option '-L...'”,然后去谷歌百度,找到了一不一定能用,关键是不一定能懂。像上面的例子,编译时系统至少会给出四个警告,假设我添加了第三方的类库:

    1)directory not found for option '-L.../custom'

    2)directory not found for option '-Lframework'

    3)directory not found for option '-Land'

    4)directory not found for option '-Llib/...'

如果不忽视警告,会很容易发现“custom framework and lib”被拆分成了四部分。解决时有针对性就好办了。要么修改文件夹名字,要么反斜杠转义,这两种方法复杂度差不多。如果项目是把第三方的东西放在一起的话切项目规模比较大,建议选择改文件夹名字;如果只是散列的放置则无所谓了。