Targets选项下有Other linker flags的设置,用来填写XCode的连接器参数,如:-ObjC -all_load -force_load等。
还记得咱们在学习C程序的时候,从C代码到可执行文件经历的步骤是:
源代码 > 预处理器 > 编译器 > 汇编器 > 机器码 > 连接器 > 可执行文件
在 最后一步须要把.o文件和C语言运行库连接起来,这时候须要用到ld命令。源文件通过一系列处理之后,会生成对应的.obj文件,而后一个项目必然会有许 多.obj文件,而且这些文件之间会有各类各样的联系,例如函数调用。连接器作的事就是把这些目标文件和所用的一些库连接在一块儿造成一个完整的可执行文 件。
若是要详细研究连接器作了什么,请看:http://www.dutor.net/index.php/2012/02/what-linkers-do/php
那么,Other linker flags设置的值实际上就是ld命令执行时后面所加的参数。函数
下面逐个介绍3个经常使用参数:
-ObjC:加了这个参数后,连接器就会把静态库中全部的Objective-C类和分类都加载到最后的可执行文件中
-all_load: 会让连接器把全部找到的目标文件都加载到可执行文件中,可是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,而后又使用了这个参数,那么你很 有可能会遇到ld: duplicate symbol错误,由于不一样的库文件里面可能会有相同的目标文件,因此建议在遇到-ObjC失效的状况下使用-force_load参数。
-force_load:所作的事情跟-all_load实际上是同样的,可是-force_load须要指定要进行所有加载的库文件的路径,这样的话,你就只是彻底加载了一个库文件,不影响其他库文件的按需加载post