other link flags

一个程序从简单易读的代码到可执行文件往往要经历一下步骤:
源码>预处理器>编译器>汇编器>机器码>链接器>可执行文件
源文件经过一系列处理后,会生成对应的.obj文件,一个项目中会生成很多的.obj文件,且这些文件之间会有各种各样的联系。链接器要做的事情就是把这些.obj文件和所用的一些库链接在一起形成一个完整的可执行文件。链接器做了什么

ios开发中一般会用到几个参数

  • -Objc
  • -all_load
  • -force_load

使用-Objc后,连接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中,这样可能会因为加载了很多不必要的文件导致可执行文件变大。
当静态库中只有分类而没有类的时候,-Objc参数就会失效。这个时候就需要使用-all_load或者-force_load了。

-all_load会让链接器把所有能找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到ld:duplicate symbol错误,因为不同库文件里面可能会有相同的目标文件,建议在-Objc失效的情况下再使用-force_load参数。

-force_load所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载。

你可能感兴趣的:(other link flags)