关于XCode链接选项 -ObjC -all_load -force_load
2015-06-30 00:00
239 查看
摘要: -ObjC 标志可以解决使用静态库中的category时出现unrecognized selector的问题。而-all_load和 -force_load标志是由于老版本的链接器bug导致-ObjC特定情况下失效而引入的。现在不再需要。
在Xcode工程的Other linker flags中添加-ObjC 标志可以解决使用静态库中的category时出现unrecognized selector的问题。
UNIX的静态库(xxx.a)其实就是一个目标文件(xxx.o)的集合。在C语言中,编译一个源文件时如果遇到在其他文件中定义的函数,则会留下一个 undefined symbol。在链接时会通过找到其他文件中的定义来确定这个symbol。
在Objective-C中,由于方法调用都是在运行期确定的,因此没有针对方法的symbol,只有针对类的。
这样在静态库中如果使用了category扩展已有的类,编译器不知道如何将category和已有的类整合在一起,就会导致unrecognized selector问题。添加-ObjC标志后,编译器会把一个类相关的所有目标文件都加载,这样就解决了这个问题。但是由于这样做会使可执行文件体积变大,所以没有设为默认选项。
在64位ios应用环境下,由于链接器的一个bug,在静态库中只有category没有对应的class定义时,-ObjC标志会失效。这时可以使用-all_load强制加载所有目标文件,或者使用-force_load指定加载某一个包。
在Xcode4.2之后,这个链接器bug已经被修复,因此-all_load 和 -force_load标志都不再需要了。在必要时添加-ObjC即可。
参见:
https://developer.apple.com/library/mac/qa/qa1490/_index.html
http://stackoverflow.com/questions/7942616/why-is-force-load-no-longer-required-for-my-three20-dependencies-in-xcode-4-2/7942924#7942924
在Xcode工程的Other linker flags中添加-ObjC 标志可以解决使用静态库中的category时出现unrecognized selector的问题。
UNIX的静态库(xxx.a)其实就是一个目标文件(xxx.o)的集合。在C语言中,编译一个源文件时如果遇到在其他文件中定义的函数,则会留下一个 undefined symbol。在链接时会通过找到其他文件中的定义来确定这个symbol。
在Objective-C中,由于方法调用都是在运行期确定的,因此没有针对方法的symbol,只有针对类的。
这样在静态库中如果使用了category扩展已有的类,编译器不知道如何将category和已有的类整合在一起,就会导致unrecognized selector问题。添加-ObjC标志后,编译器会把一个类相关的所有目标文件都加载,这样就解决了这个问题。但是由于这样做会使可执行文件体积变大,所以没有设为默认选项。
在64位ios应用环境下,由于链接器的一个bug,在静态库中只有category没有对应的class定义时,-ObjC标志会失效。这时可以使用-all_load强制加载所有目标文件,或者使用-force_load指定加载某一个包。
在Xcode4.2之后,这个链接器bug已经被修复,因此-all_load 和 -force_load标志都不再需要了。在必要时添加-ObjC即可。
参见:
https://developer.apple.com/library/mac/qa/qa1490/_index.html
http://stackoverflow.com/questions/7942616/why-is-force-load-no-longer-required-for-my-three20-dependencies-in-xcode-4-2/7942924#7942924
相关文章推荐
- serverlet配置文件
- 两个oracle数据库如何做数据交换
- oracle分组写法
- oracle_10g_flashback(数据恢复)
- oracle建立表空间用户,导入导出命令
- java 三层结构理解以及jdk环境配置
- Oracle的卸载
- 正则
- 批处理备份数据库.txt
- Liferay 6.1开发学习(一):环境搭建【转】
- IE不支持option的display样式,只能使用remove和add【转】
- 企业即时通讯软件给企业带来的价值
- 易度自己的即时通讯工具
- load-on-startup在web.xml中的含义(转)
- CAS 之自定义登录页实践
- 设计模式学习--原型模式
- 事件分发和手势
- Flex开发实战(二)--Flash Builder 4.7下载和安装及破解方法
- LVS:DR配置
- linux安装pdo_dblib扩展支持sqlserver