Xcode 5.1 和架构 x86_64 的编译错误
Posted
技术标签:
【中文标题】Xcode 5.1 和架构 x86_64 的编译错误【英文标题】:Xcode 5.1 and compiling error for architecture x86_64 【发布时间】:2014-04-15 08:27:17 【问题描述】:昨天我有一个项目在使用 Xcode 5 时没有问题。今天,在更新到 Xcode 5.1 后,我有 6 个错误并且项目没有编译。
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_PayPal", referenced from:
objc-class-ref in SUAppDelegate.o
objc-class-ref in SUTViewController.o
"_OBJC_CLASS_$_PayPalAdvancedPayment", referenced from:
objc-class-ref in SUTViewController.o
"_OBJC_CLASS_$_PayPalInvoiceData", referenced from:
objc-class-ref in SUTViewController.o
"_OBJC_CLASS_$_PayPalInvoiceItem", referenced from:
objc-class-ref in SUTViewController.o
"_OBJC_CLASS_$_PayPalReceiverPaymentDetails", referenced from:
objc-class-ref in SUTViewController.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
该项目包含 PayPal 库,并且已正确链接到代码中。它在那里,我可以看到图书馆,所以它不是缺少的图书馆。
在 6.1 Simulator 中运行代码编译没有问题。
Xcode 5.1 的新功能“更新 ios 标准架构设置以包含 64 位。”可能是个问题?
也许我应该更改标准架构?或者与 PayPal 库相关的东西?
有人知道怎么解决吗?
【问题讨论】:
“更新到 Xcode 7.1 之后”真的吗? 从 Target / Build Settings / Architectures / Valid Architectures 中删除 arm64 允许我编译项目。但这意味着我不是为 64 位编译的? 我认为您使用的库不支持 arm64。检查其更新是否可用。 5.1 抱歉,这是 iOS 7.1 和 Xcode 5.1 的混合 :) 检查这个link,它报告了paypal库的同样问题。 【参考方案1】:选择应用目标的构建设置,选择架构,点击其他...并删除 $(ARCHS_STANDARD) 并添加 $(ARCHS_STANDARD_32_BIT)
下面是相同的图片
它为我解决了这个问题。
【讨论】:
【参考方案2】:我认为您使用的贝宝库不支持 arm64。
查看PayPal-iOS-SDK issue-47 获取更新的贝宝库。
编辑 :- update link 用于 paypal 库(支持 arm64)
【讨论】:
版本 2.0.1 可用:github.com/paypal/PayPal-iOS-SDK/releases 自 1.4.1 起兼容 64 位【参考方案3】:我自己发现这项任务很困难,所以我制作了一个视频来解释如何从有效架构中删除 arm64。希望对您有所帮助!
https://www.youtube.com/watch?v=d-pJLRy4rVk&feature=youtube_gdata_player
【讨论】:
【参考方案4】:转到 Targets -> Build Settings -> Linking -> Other Linker Flags 添加 -ObjC -l"PayPalMobile" -l"Pods-PayPal-iOS-SDK" -l"c++" -framework "AVFoundation" -framework " AudioToolbox" -framework "CoreLocation" -framework "CoreMedia" -framework "MessageUI" -framework "MobileCoreServices" -framework "SystemConfiguration"
【讨论】:
【参考方案5】:如果您只是错过了 x86_64 架构(但您有 arm64)并且无法获得包含 x86_64 架构的库,请执行以下操作:
【讨论】:
【参考方案6】:除了 Nikita 的回答,您可以将参数从“i386”更改为 x86_64
以编译匹配 x86_64
架构的库。然后编译错误就会消失。
【讨论】:
以上是关于Xcode 5.1 和架构 x86_64 的编译错误的主要内容,如果未能解决你的问题,请参考以下文章
iOS - Xcode升级到5.1& iOS升级到iOS7.1问题:Undefined symbols for architecture x86_64
Undefined symbols for architecture x86_64
Undefined symbols for architecture x86_64