问题 XCode 6 GM:构建设备时出现链接器错误(找不到金属)


我正在尝试在XCode 6 GM中为设备构建我的项目(基本SDK版本为7.1),并且我得到链接器错误:

ld: framework not found Metal for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

相同的项目在XCode 5中完美构建,项目设置没有任何变化。 (另外,在XCode 6中构建 模拟器 成功。)

我正在使用SDK 7.1构建,为什么XCode 6试图链接到Metal呢?


10325
2017-09-12 09:11


起源

清洁项目为我修好了。 - c1pherB1t
你的意思是针对8.0 SDK的7.1部署目标? Xcode 6没有7.1 SDK。 - Jeremy Huddleston Sequoia
@JeremyHuddleston红杉没有,我的意思是7.1 SDK。我从XCode 5目录中复制了它。 - HiveHicks
可能是你在使用第三方sdk。解决这个问题的方法是,你需要删除你的第三方sdk并逐个集成。在整合每个sdk之后,你需要构建代码来检查是否存在金属错误。 - Shauket Sheikh


答案:


有同样的问题。我能够在Xcode 6中建立应用程序,指向模拟器或手机,但归档时我得到此错误。我正在使用iOS 7.1 SDK。

我正在使用cocoapods,发现我可以解决问题 对于pods项目,将“自动链接框架”设置为“否”,或者在插入设备时进行归档,并且该方案的目标是设备,而不仅仅是“iOS设备”。 

这是由Xcode 6的默认项目构建设置引起的问题。

编辑:以下是此解决方案的另一种解释: http://www.appsee.com/blog/dev/xcode-new-link-frameworks-automatically-fix-framework-not-found-metal-for-architecture-armv7


9
2017-09-19 00:43



这并没有真正回答这个问题。如果您有其他问题,可以点击提问 问问题。你也可以 加一个赏金 一旦你有足够的东西,就要更多地关注这个问题 声誉。 - MrTux
它确实回答了问题@MrTux ...已经给出了一个解决方案,但如果可用,OP仍然会想要更好的解决方案。 - Ben
我已经将cocoapods置于版本控制之下,只是将Link Frameworks自动设置为NO并提交它。我的团队从那时起就没有任何问题,我的Jenkins服务器也很开心。 - RJDubz
“插入设备时存档”选项对我有用,也是cocoapods用户。它可能取决于豆荚本身。例如,在我使用DBCamera之前,设置 Link Frameworks Automatically 至 NO 如上所述运作良好。但由于DBCamera依赖于GPUImage,因此CPUImage的目标是 Link Frameworks Automatically 被设定为 ${PODS_GPUIMAGE_CLANG_MODULES_AUTOLINK},我怀疑这就是为什么我无法设置它 NO。 - kraftydevil


我在构建精美的iOS 8.0 SDK(Xcode 6.0.1)的代码库中遇到了同样的问题,并且在iOS 7.1 SDK中遇到了这个问题(尽管在Xcode 5.1.1中)。似乎有很多不同的项目有这个问题。看到 这里 更多细节。

解决这个问题的原因是我的目标'Build Phase'设置,'Link Binary with Libraries'以及删除和重新添加CoreVideo.framework,'Product> Clean',最后是'Product> Run' 。


1
2017-09-23 11:24





使用带有Xcode 6的iOS 7.1 SDK不是受支持的配置。链接器在这里表现正常。 7.1 SDK不包含要链接的Metal.framework,并且您已请求链接Metal.framework。您需要使用iOS 8.0 SDK或更高版本才能使用Metal.framework。


-1
2017-09-22 22:04



我不使用Metal框架。 - HiveHicks
您提供的日志明确说明了其他情况。我建议使用iOS 8 SDK,因为这是唯一受支持的iOS SDK与Xcode 6一起使用。然后查看Xcode项目的目标构建阶段,看看Metal.framework带来了什么。 - Jeremy Huddleston Sequoia
BS。为了在您的电脑上没有两个Xcode版本,您可以在Xcode 6中删除7.1 SDK。 - Rick van der Linde
@Rick ...是的,你可以这样做,有些东西可能会继续工作,但它不是受支持的配置。 - Jeremy Huddleston Sequoia