Die*_*sta 14 iphone objective-c compiler-warnings
我有一个应用程序,其中包含我开发的外部库,每次使用设备作为目标编译时,我都会收到以下警告消息:
mylib-release-iphonesimulator.a,文件是为不支持的文件格式而构建的,而不是被链接的体系结构(armv7).
我有2个版本的库,都添加到项目中.一个用于iphonesimulator,另一个用于iphoneos.
即使它在任何目标上运行良好(似乎编译器根据目标采用了正确的库版本),这种警告也会变得很烦人.
有没有办法摆脱警告,甚至更好地编译单个库上的两个平台,避免同一个库的2个二进制文件?
谢谢!
Dav*_*ong 33
你不想摆脱这个错误,你想要解决它.
这里的问题是您将库的模拟器版本链接到应用程序的设备版本中.模拟器需要i386架构中的库,而设备需要armv6或armv7架构中的东西.
所以这里的解决方案是链接库的正确版本.
我通常做的是将它们组合成一个库,让链接器为我选择正确的版本.这是你在终端做的事情:
$ cd /path/to/my/libraries
$ ls
libMyLibrary-Device.a
libMyLibrary-Simulator.a
$ file libMyLibrary-Device.a
libMyLibrary-Device.a: Mach-O universal binary with 2 architectures
libMyLibrary-Device.a (for architecture armv6): current ar archive random library
libMyLibrary-Device.a (for architecture armv7): current ar archive random library
$ file libMyLibrary-Simulator.a
libMyLibrary-Simulator.a: Mach-O universal binary with 1 architecture
libMyLibrary-Simulator.a (for architecture i386): current ar archive random library
$ lipo -create -output libMyLibrary.a libMyLibrary-Device.a libMyLibrary-Simulator.a
$ ls
libMyLibrary-Device.a
libMyLibrary-Simulator.a
libMyLibrary.a
$ file libMyLibrary.a
libMyLibrary.a: Mach-O universal binary with 3 architectures
libMyLibrary.a (for architecture armv6): current ar archive random library
libMyLibrary.a (for architecture armv7): current ar archive random library
libMyLibrary.a (for architecture i386): current ar archive random library
Run Code Online (Sandbox Code Playgroud)
然后你只需链接libMyLibrary而不是设备或模拟器版本,链接器将做正确的事情.
我在SQLite 3库(libsqlite3.dylib)中遇到了同样的问题.我打开了一个较旧的项目并编译了相同的库.我比较了每个项目的目标信息>构建设置>搜索路径,而旧的(工作)项目是空的,新项目中的"框架搜索路径"中有多个搜索路径.删除所有这些解决了这个问题.希望这对某人有所帮助,这花了我很多很长时间才弄明白.
| 归档时间: |
|
| 查看次数: |
17165 次 |
| 最近记录: |