symbols not found for architecture arm64 问题解决
2016-06-21 00:00
363 查看
在创建自己的静态库时引入afn3.x,真机调试的时候遇到了这个问题
解决方法:
在Xcode工程的Other linker flags中添加-ObjC 标志
-------------
在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即可。
-----------
在引入第三方静态库的时候有时候也会出现这种问题:
此时 进入这个.a文件所在的目录,在终端使用 lipo -info xxx.a 看看这些静态文件是否支持64位,如果是不支持64位的可以下载一个最新的支持 64位的三方库.
解决方法:
在Xcode工程的Other linker flags中添加-ObjC 标志
-------------
在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即可。
-----------
在引入第三方静态库的时候有时候也会出现这种问题:
此时 进入这个.a文件所在的目录,在终端使用 lipo -info xxx.a 看看这些静态文件是否支持64位,如果是不支持64位的可以下载一个最新的支持 64位的三方库.
相关文章推荐
- 深入探讨Linux静态库与动态库的详解(一看就懂)
- linux生成(加载)动态库静态库和加载示例方法
- iOS创建与使用静态库
- xcode 4 制作静态库图文详解
- Xcode中创建静态库,使用Target支持不同平台
- iOS 开发——生成.a文件
- linux 下静态库和动态库详解
- iOS 创建静态库
- Build Settings/Linking/Other Linker Flags
- linux中的动态库和静态库
- 静态链接与动态链接的异同
- Linux下创建和使用静态库、共享库的方法总结
- 关于Unix静态库和动态库的分析
- 静态库的创建
- 使用Automake 创建和使用静态库/动态库
- Head First C 学习日志 第八章 静态库与动态库 静态库的创建与使用
- linux 静态库的编译和连接过程遇到的问题
- 静态库制作之备注
- iOS开发-静态库.a的制作
- VS2010上编译opencv3.1.0的32位静态链接库(动态链接库)