首页 > 编程知识 正文

手机参数详解,property标签属性

时间:2023-05-06 04:14:07 阅读:112605 作者:4500

详细介绍Xcode的Other Linker Flags参数otherlinkerflagsotherlinkerflags的位置原理常用参数总结参考链接

Other Linker Flags

因为项目出了问题,所以融合记录了多篇文章。

Other Linker Flags的位置在Xcode的项目中参照Tergets - Build Settings - linking - Other Linker Flags、链接系统的标准库、其他三方库的参数、链接器参数

介绍原理c代码到可执行文件的经验如下。

源代码预处理器编译器汇编器机器代码链接器可执行文件

预处理器(预编译)在此阶段,编译器将在c或OC中包含的源代码中包含的stdio.h和#import库编译到编译器中。 在这个阶段,编译器首先检查代码的正规性、语法错误等,决定代码实际进行的工作, 确认无误后编译器将代码翻译成汇编语言汇编器:在汇编阶段将编译阶段生成的汇编代码转换为二进制目标文件链接器:将不同部分的代码和数据合并到一个文件中的过程要将编译输出的二进制文件链接到最终可执行的目标文件,在最后一步中必须链接. o文件和c语言运行库,此时需要ld指令。 源文件经过一系列处理,生成相应的. obj文件。 而且,项目中始终有许多. obj文件,这些文件之间存在各种联系,如函数调用。 请注意,在链接阶段,编译阶段的某些仅函数声明的头文件将没有函数实现的库链接到可执行文件。 (库分为动态库和静态库。 静态库)是指在编译链接时将库文件的所有代码添加到可执行文件中,因此生成的文件较大,但在运行时不需要其他库文件(.a )。 动态库:在程序运行时,通过在运行时链接文件加载库,可以节省系统开销(.so )。 从这个流程中应该也能明白。 为什么编译过程中没问题,运行中会报告错误?

那么为什么要设置Other Linker Flags呢?因为Other Linker Flags其实就是链接器工作时,除了默认参数外的其他参数。Other linker flags设置的值实际上就是ld命令执行时后面所加的参数。

常用参数介绍以下三个常用参数:

-ObjC :

添加此参数后,链接器会将静态库中的所有Objective-C类和分类加载到最后一个可执行文件中。

这样编译后的app就会变大(因为加载了其他Objc代码才进来)。 但是,如果静态库中有类和类别,则只能添加此标志。

但是,Objc也不是万能的。 如果静态库中只有分类而没有类,则Objc将被禁用。 必须使用-all_load或-force_load。 -all_load :

这个flag专门处理-ObjC的错误。 如果使用-ObjC后类库中只有category没有类,则不会加载这些category。 解决方法是添加-all_load或-force-load。

-all_load会将在链接器中找到的所有目标文件加载到可执行文件中,即使没有Objc代码,因此千万不要随便使用这个参数! 如果使用多个静态库文件并使用此参数,则很可能会发生ld: duplicate symbol错误,因为不同的库文件可能包含相同的目标文件。

这里有两种方法:在命令行上开箱。 如果禁用了-ObjC,请使用-force_load参数。 -force_load :

您所做的与-all_load实际上相同,但-force_load必须指定进行所有加载的库文件的路径。 这样做只会完全加载库文件,而不会影响其余库文件的按需加载。个人建议-ObjC与-force_load搭配使用比较好。

如果要包括静态库,则必须将值添加到Target的Other Linker Flags中。 -ObjC,-all_load,-force_load。

-ObjC是指将实现类或分类的所有成员加载到静态库文件中。 -all_load使链接器加载所有静态库中的所有对象文件,甚至没有OC代码的文档。 -force_load (软件包路径)是静态库文件中加载指定路径的所有成员,finer可以控制文档的加载。 所有-force_load操作都必须具有文档路径,并且会加载文档中的所有对象文件。 链接https://blog.csdn.net/yuanmeng ONG 886/article/details/52687483359 www.cn blogs.com/TIG 66666666/p/6829382.hh

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。