使用 CocoaPods 执行 pod install 时出现 - Use the $(inherited)
flag … 警告解决办法
Xcode 中 Build Setting 的两处设置
Other Linker Flags
一般在我们使用某些静态库的时候,里面可能有一些类的分类,正常情况下 链接器 会以为这个分类已经存在,而不去读了,导致了我们缺失了正常的功能,所以为了把这些分类和核心类的代码合起来,必要的时候我们得加上 -ObjC, 形成我们需要的可执行文件。-all_load: 链接器把所有找到的目标文件都加载到可执行文件中。但是可能不同的静态库使用了相同的文件导致出错。
-force_load: 它也是让链接器把所有找到的目标文件都加载到可执行文件中,但是它需要指定进行全部加载的库文件的路径,从而保证只是完全加载了一个库文件。
总的来说,一般用 -ObjC,就算当其失效后,用 -force_load 就可以,而不用-all_load。
Search Paths
常用路径 path ,就是下面三种啦:
Framework Search Paths
附加到项目中的framework 的搜索路径。
Library Search Paths
附加到项目中的第三方Library的搜索路径。
Header Search Path
头文件的搜索路径。
User Header Search Paths
只有在Always Search User Paths为Yes时才会被搜索。
(inherited):添加目录的时候写上“ ( i n h e r i t e d ) : 添 加 目 录 的 时 候 写 上 “ (inherited)” 就是表示路径自己从frameworks里面读取。 默认的情况下路径配置是不被 Targets 继承的,只有当Targets的设置加入了$(inherited)时才被继承,继承来自更高一级的配置。
${PODS_ROOT} : 使用 CocoaPods 时候,Pods 下的路径。有时在用cocoaPod install 完成所需要的第三方类库之后,在要用的地方导入(#import)发现不提示,需要自己手动加入,但现在很少见这种情况啦。
${SDK_DIR}: 指编译目标所使用的 SDK 的目录。
$(SRCROOT) : 代表项目工程文件目录,很好的避免其他同学使用时需要再换路径的情况。
$(PROJECT_DIR) : 表示当前工程文件夹目录,相对路径(相对于当前项目文件夹)。和$(SRCROOT) 区别是它代表** 整个项目 **。
最常见的错误
- warning:ld: warning: directory not founder option
查找 Library Search Paths 和 Framework Search Paths,删掉编译报warning的路径即OK。 - warning:ld: library not found for -lPods
在 Build Setting 中 other linker flag 里,加上$(inherited)即可。