最近,我切换到Xcode4,当我编译项目时,我得到了以下错误。
ld: warning: ignoring file /Users/myname/Library/Developer/Xcode/DerivedData/appname-hezrgyqimckztgbdlslkavphdclw/Build/Products/Debug-iphoneos/libTapkuLibrary.a, file was built for archive which is not the architecture being linked (armv6)
Undefined symbols for architecture armv6:
"_OBJC_CLASS_$_TKLoadingView", referenced from:
objc-class-ref in RootViewController.o
我打开了TapkuLibrary并检查它的架构设置为'Standard(armv6 armv7)'。
我该怎么做才能解决这个问题?
答案 0 :(得分:111)
我弄清楚导致问题的原因。我将TapkuLibrary的“Build Active Architecture Only”从Yes更改为No,并且编译没有任何问题。
答案 1 :(得分:35)
我能够通过执行与the accepted answer相反的方式来解决这个问题 - 我将“仅构建活动架构”从“否”更改为“是”。
答案 2 :(得分:11)
有同样的问题。但我认为原因不同。我正在使用为模拟器构建的library.a文件,并试图在设备上运行它。我知道我需要不同的.a文件用于模拟器和设备。我希望这有助于某人;)
答案 3 :(得分:6)
尝试删除armv6架构,并仅为armv7编译它。
答案 4 :(得分:2)
对我有用的其他东西是确保所有子项目都将架构设置为armv6和armv7,确保设置每个子项目的TARGET和PROJECT。在清理和重建所有东西后,它没有问题。
答案 5 :(得分:2)
这解决了我的问题:
像three20这样的外部库为
做了额外的设置构建设置 - >架构 - >任何iOS SDK
价值是" armv6 armv7"与标准" armv7 armv7s"
不同下拉并选择"标准",它对我有用。
答案 6 :(得分:2)
我通过单击“不友好”项目(在我的GMGridView中)来管理它。 在“架构”选项卡中,我改变了某些东西的价值(我不记得了,我猜它是:)“armv7,armv6s”改为“armv7,armv7”。 之后它对我有用。
答案 7 :(得分:1)
我设法通过在Tapku信息设置中创建一个adhoc配置来解决这个问题......
答案 8 :(得分:1)
确保项目中的构建变体设置为“正常”。
如果要构建包含其他项目的项目,请查看主项目的DerivedData文件夹。使用“lipo -info yourarchive.a”检查存档文件。另外,检查这些档案的时间戳。您可能会发现这些库没有重建,或者您尝试链接旧版本的存档,这是错误的架构。
就我而言,我关闭Xcode并删除了我的主项目的DerivedData文件夹。当我在Xcode 4中重新打开主项目时,这强制完全重建。完全重建导致创建i386存档(或找到正确的版本)&要正确链接的模拟器版本。
答案 9 :(得分:1)
这对我有用:
点击违规框架的“项目”文件(xcodeproj)。
转到框架“项目”的“信息”标签(不是“目标”)。
展开“配置”并确保“调试”和“发布”都设置了2个配置 - 一个用于框架的“项目”,另一个用于框架的“目标”。在框架的情况下,“目标”编译为库而不是应用程序,因此很容易混淆。
'Debug'应将Project设置为'Debug',将Library设置为'Shared'
'发布'应将项目设置为'发布',将库设置为'共享'
编译,运行和享受。
如果您最终破坏整个项目试图解决这个问题,那么您可能需要仔细检查应用程序的项目构建阶段(如Gon建议的那样)。即使驱动器上不存在库,库也应该以红色突出显示。如果没有,只要它设置为“共享”,您就应该能够重新添加它。
如果你真的真的破坏了你的项目,那么你可能会被迫吹掉你的DerivedData文件夹,就像russes建议的那样。此外,请检查“管理器”,因为Xcode有一种方法可以在整个地方保存垃圾。
哦,你检查确保'armv6'是否正确? :)
答案 10 :(得分:1)
如果我收到忽略文件警告 - 我会在忽略的文件上运行lipo -info
以找到它的架构,如下所示
lipo -info libTapkuLibrary.a
那将打印i386,armv6,armv7,armv7s,x86_64等。通常,该架构必须与您的目标构建平台相匹配。 E.g。
根据不匹配情况,您必须为目标平台重建库或更改目标平台。
注意:对于胖二进制文件,lipo -info
将打印上述体系结构的组合。
答案 11 :(得分:0)
我解决了这个问题,感谢另一个线程,他们表明armv6 / armv7实际上与你的想法有点不同:Upgrading to xcode 4 error No architectures to compile for
答案 12 :(得分:0)
我尝试了上面的所有选项但都没有效果。
这是正确答案:
简单地拖动项目中的框架将无法正确链接(或者在这些行中的某些内容,无论如何)
您需要做的是在Build Phases 中选择要添加的框架(单击项目的蓝色图标,然后在Targets下选择项目名称,然后选择Build Phases选项卡),请参阅here以获取更多参考。
答案 13 :(得分:0)
这些答案都不适合我。 (类似的警告信息,不同的静态库项目)。对我来说,它已经配置了XCode以遵守目标的构建目录,然后在导致问题的本地build/
目录中构建目标。配置XCOde使用“派生数据”文件夹修复它。
答案 14 :(得分:0)
我在Three20库中遇到了这个问题。最终为我做的事情是将项目格式从Xcode 3.1切换到Xcode 3.2 - 将'build active arch only'留作“no”。
答案 15 :(得分:0)
有同样的问题,并尝试从页面的各种解决方案无济于事。 我还有一条消息告诉我我的库不是为arm64构建的。
最后我如何解决它:
有时,XCode显示的构建设置有时不完整,并且与make文件不完全对应。