美文网首页iOS 开发 收集好文章
iOS 静态库架构不对导致无法编译成功

iOS 静态库架构不对导致无法编译成功

作者: FindCrt | 来源:发表于2016-03-04 13:05 被阅读4641次

1.遇到问题:

ld: warning: ignoring file   /Users/xxx/Library/Developer/Xcode/DerivedData/kxmovie-eilzobgtafjobffcieyxpdqrvsam/Build/Products/Debug-iphonesimulator/libNSLogger.a, file was built for archive which is not the architecture being linked (i386)

字面意思就是当前使用的libNSLogger.a库,不匹配需要进行链接的结构i386。
查看库的架构可以在终端使用命令:

lipo -info xxx.a   //后面是库的地址

查了下,libNSLogger.a的架构是x86_64。而在模拟器上运行,如果Build Active Architecture Only 选择为NO,库的架构是x86_64 i386的混合库:

Architectures in the fat file: /Users/xxx/Library/Developer/Xcode/DerivedData/kxmovie-eilzobgtafjobffcieyxpdqrvsam/Build/Products/Release-iphonesimulator/libPods-KxMovieExample.a are: i386 x86_64 

我的错误是在编译libNSLogger.a的时候,Build Active Architecture Only选择了YES,导致编出来只有x86_64,而APP本身却选择了NO,也就是还需要i386,所以架构不对,导致了上面的问题。

总结来说:
(1)APP包本身有一个架构设置,在Build Setting->Architectures里面设定;真机上编译就是你设定的架构,如arm64 arm7s;如果Build Active Architecture Only设为YES,就会只编译你当前使用的环境的架构,比如你连上iPhone6,就只会编译arm64的。模拟器上编译就上上面的i386 x86_64.
(2)引用的静态库也有自己的架构,如果APP需求的架构在静态库了没有,就找不到对应的函数了,报错。
当APP引用较为复杂是,这一点还是容易搞混的。

最后,静态库是可以合并的,把两种不同架构的静态库合成一个静态库,这样模拟器、真机可以使用一个库,方便些。

lipo -create 库1.a 库2.a  库3.a -output 复合库.a

相关文章

  • iOS 静态库架构不对导致无法编译成功

    1.遇到问题: 字面意思就是当前使用的libNSLogger.a库,不匹配需要进行链接的结构i386。查看库的架构...

  • iOS 静态库架构不对导致无法编译成功

    1.遇到问题: 字面意思就是当前使用的libNSLogger.a库,不匹配需要进行链接的结构i386。查看库的架构...

  • iOS疑难杂症集

    1、动态库制作相关 问题描述:在编译生成静态库.a文件的时候,选择iOS Simulators编译成功,但是换成B...

  • iOS-静态库制作

    iOS中静态库制作非常简单,只要注意编译的架构和真机模拟器的合并,基本上静态库就可以投入使用.1.创建静态库 2....

  • Android FFmpeg so库编译 支持Https

    概要 编译armv7架构的openssl、ffmpeg的a、so库,目前openssl只编译了静态库,编译动态库,...

  • 创建静态库

    iOS深入学习(创建静态库static library) 库包含静态库和动态链接库,他们之间区别是:静态库可以编译...

  • "typeinfo for xx::xxx",reference

    静态库由C++实现,其中有一个类是另一个类的子类,子类头文件如下: 可以成功编译静态库,但静态库放入iOS项目中运...

  • Mac下交叉编译iOS端静态库(.a)

    实际开发过程中,遇到编译iOS库时,用到的第三方静态库不是iOS平台的,因此需要自己编译静态库使用。下载第三库的源...

  • iOS静态库和动态库的区别

    iOS开发中静态库和动态库区别: 静态库和动态库是相对编译期和运行期的:静态库在程序编译时会被链接到目标代码中,程...

  • iOS静态库和动态库的使用

    iOS开发中静态库和动态库区别 静态库和动态库是相对编译期和运行期的:静态库在程序编译时会被链接到目标代码中,程序...

网友评论

    本文标题:iOS 静态库架构不对导致无法编译成功

    本文链接:https://www.haomeiwen.com/subject/xueokttx.html