Xcode4链接问题。 文件是为了归档而构build的,而不是被链接的体系结构(arm6)

最近,我切换到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,并检查它的架构设置为“标准(armv6 armv7)”。

我能做些什么来解决这个问题?

我想清楚是什么导致了这个问题。 我把TapkuLibrary的“仅仅构build主动架构”从“是”更改为“否”,编译没有问题。

通过与接受的答案相反,我能够解决这个问题 – 我将“仅生成活动架构”从NO更改为YES。

有同样的问题。 但是我认为原因是不同的。 我正在使用为模拟器build立的library.a文件,并试图在设备上运行..来知道我需要不同的.a文件模拟器和设备。 我希望这可以帮助别人 ;)

例如,在这里我已经导入了不同的设备和模拟器的库文件

当我将XCode升级到4.5和iOS到iOS6时遇到了这个问题。 对于GMGridView,它刚刚发生。 不适用于模拟器,但仅适用于设备。

我通过以下步骤解决了这个问题:1)进入GMGridView项目 – >构build设置2)在设置 – >体系结构下,select“标准(armv7,armv7s)”

然后清理所有(包括DerivedData)并重build。

希望能帮助到你!

尝试删除armv6体系结构,并仅为armv7进行编译。

还有一些工作是为了确保所有子项目的架构设置为armv6和armv7,确保设置每个子项目的TARGET和PROJECT。 在清理和重build所有东西之后,它没有任何问题。

这解决了我的问题:

一些像three20这样的外部库为其做了额外的设置

构build设置 – >体系结构 – >任何iOS SDK

值为“armv6 armv7”,与标准的“armv7 armv7s”不同

下拉select“标准”,它为我工作。

我通过点击“不友好”的项目(在我的情况下是GMGridView)来pipe理它。 在“体系结构”选项卡中,我改变了某个值(我不记得已经有了,现在我想是“armv7,armv6s”到“armv7,armv7”。 之后,它为我工作。

我设法通过在Tapku信息设置中创build一个adhocconfiguration来解决这个问题。

XCODE 4,Project> Archive = Library未find-lTapkuLibrary – 问题 – devinross / tapkulibrary – GitHub

确保项目上的构build变体设置为“正常”。

如果您正在构build包含其他项目的项目,请查看主项目的DerivedData文件夹。 使用“lipo -info yourarchive.a”检查归档文件。 另外,检查这些档案的时间戳。 您可能会发现这些库没有得到重build,或者您正在尝试链接旧版本的归档,这是错误的架构。

在我的情况下,我closuresXcode并删除了我的主项目的DerivedData文件夹。 当我重新打开Xcode 4中的主项目时,这强制完全重build。完全重build导致创buildi386存档(或find正确的版本)和模拟器版本以正确链接。

这对我工作:

  1. 点击违规框架的“项目”文件(xcodeproj)。

  2. 转到框架“项目”(而不是“目标”)的“信息”选项卡。

  3. 展开“configuration”,并确保“debugging”和“发布”都有2个configuration – 一个用于框架的“Project”,另一个用于框架的“Target”。 在框架的情况下,“目标”编译到一个图书馆,而不是一个应用程序,所以很容易混淆。

  4. “debugging”应该将项目设置为“debugging”,并将库设置为“共享”

  5. “发布”应该将项目设置为“发布”,并将“媒体库”设置为“共享”

  6. 编译,运行和享受。

  7. 如果您最终想要弄清楚您的整个项目,那么您可能需要仔细检查应用程序的项目构build阶段(如Gonbuild议的那样)。 图书馆应该以红色突出显示,即使它不在你的驱动器上。 如果没有,只要它被设置为'共享',你应该能够再次添加它。

  8. 如果你确实真的搞砸了你的项目,那么你可能会被迫按照Russes的build议吹掉你的DerivedData文件夹。 此外,检查“组织者”,因为Xcode有一个方法来保存废话到处都是。

  9. 哦,你检查确保'armv6'在那里吗? 🙂

如果我得到忽略文件的警告 – 我会运行lipo -info忽略的文件来find它的架构如下

 lipo -info libTapkuLibrary.a 

这将打印i386,armv6,armv7,armv7s,x86_64等。通常,该体系结构必须与您的目标构build平台相匹配。 例如

  • i386 = iOS模拟器或32位版本的Mac OS X上
  • armv6 armv7 arm7s = ios设备
  • x86_64 =在Mac OS上构build64位x

根据不匹配情况,您必须重新构build目标平台的库或更改目标平台。

注意:对于胖二进制文件, lipo -info将打印上述体系结构的组合。

我解决了这个问题,由于另一个线程,他们显示,armv6 / armv7实际上是有点不同,你认为它是: 升级到xcode 4错误没有体系结构编译为

这些答案都没有为我工作。 (类似的警告消息,不同的静态库项目)。 对我来说,它已经configuration了XCode来兑现目标的构build目录,然后将目标构build在导致问题的本地build/目录中。 configurationXCOde使用“派生数据”文件夹固定它。

我有Three20库的问题。 最后这样做的事情是将项目格式从Xcode 3.1切换到Xcode 3.2 – 将“仅build立活动拱形”保留为“否”。

我尝试了上面所有的选项,没有任何工作。

这是正确的答案:

简单地在你的项目中拖动一个框架将不会正确地链接它(或者沿着这些线,无论如何)

你需要做的是在Build Phases中select你想要添加的框架(点击你的项目的蓝色图标,然后select目标下的项目名称,然后选项卡Build Phase) , 在这里看到更多的参考。

有同样的问题,并试图从页面的多样化解决scheme无济于事。 我仍然有一个消息告诉我,我的图书馆不是为arm64构build的。

最后我是如何解决它的:

  • 在文本编辑器中打开该库的project.pbxproj
  • searchVALID_ARCHS
  • 发生4次,其中2次不包含arm64
  • 我在链中手动添加了arm64(VA​​LID_ARCHS =“arm64 i386 armv7 armv7s”)
  • 重build这个lib,这是没问题的

似乎XCode显示的构build设置有时不完整,并且与make文件不完全对应。