【问题标题】:Undefined symbols for architecture arm64架构 arm64 的未定义符号
【发布时间】:2013-10-13 08:58:16
【问题描述】:

每次从 CocoaPods 导入文件时,我都会收到 Apple Mach-O 链接器错误。

Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_FBSession", referenced from: someFile
ld: symbol(s) not found for architecture arm64

对于我使用的各种 Pod,我得到了大约 12 个。

我正在尝试使用 XCode 5 为 iPhone 5S 构建。

我在 SO 上尝试了各种解决方案,但还没有任何一个可以工作。

如何解决这个 Apple Mach-O 链接器错误?


刚刚发现另一个可能很有趣的警告,我希望这能引导我找到解决方案:

Ignoring file ~/Library/Developer/Xcode/DerivedData/SomeApp/Build/Products/Debug-iphoneos/libPods.a, 

file was built for archive which is not the architecture being linked(arm64):~/Library/Developer/Xcode/DerivedData/someApp/Build/Products/Debug-iphoneos/libPods.a

【问题讨论】:

  • 简单解决方案转到目标 -> 链接 -> 其他链接器标志并在调试和发布中的其他链接器标志中添加 $(inherited)。

标签: ios xcode xcode5 cocoapods


【解决方案1】:

在安装 AWS 框架以解决此问题后,我遇到了同样的问题,我已经从您的项目中更新了 POD 配置文件,该文件是在安装 AWS POD 后创建的。检查配置文件如下

OTHER_LDFLAGS = $(inherited) -ObjC -l"Pods-AWSAutoScaling" -l"
Pods-   AWSCloudWatch" -l"Pods-AWSCognito" -l"Pods-AWSCore" -l
"Pods-AWSDynamoDB" -l"Pods-AWSEC2" -l"Pods-AWSElasticLoadBalancing" 
-l"Pods-AWSKinesis" -l"Pods-AWSLambda" -l"Pods-AWSMachineLearning" 
-l"Pods-AWSS3" -l"Pods-AWSSES" -l"Pods-AWSSNS" -l"
Pods-AWSSQS"-l "Pods-AWSSimpleDB" -l"Pods-Bolts" -l"Pods-FMDB" 
-l"Pods-GZIP" -l"Pods-Mantle" -l"Pods-Reachability" -l"Pods-TMCache" 
-l"Pods-UICKeyChainStore" -l"Pods-XMLDictionary" -l"sqlite3" -l
"z"-framework "Accelerate" -framework "AssetsLibrary" 
-framework "CoreLocation" -framework "Foundation" -framework
"ImageIO" -framework "Security" -framework "SystemConfiguration"
-framework "UIKit" -weak_framework "UIKit"
 OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS)   

如果您的配置文件无法正常工作,则将您的 Other Linker flag 设置为 $(inherited)

【讨论】:

    【解决方案2】:

    如果架构和链接器设置看起来不错,请检查您的 h 文件。我的问题是同样的错误,但我已经重组了 h 文件并删除了 extern 语句。其他 m 文件正在使用该变量,导致链接器错误。

    【讨论】:

      【解决方案3】:

      添加“Security.framework”对我有用。

      【讨论】:

        【解决方案4】:

        我知道这是一个旧分支。但是,在迁移到最新的 CocoaPods 版本(1.0.0)并尝试重新安装所有 pod 后,同样的问题开始发生在我身上。我遇到了“缺少 armv64 的符号”链接器错误。 奇怪的是,我通过执行以下步骤解决了它:

        1. 删除所有 pod(pod init、 吊舱安装)

        2. 以相反的顺序重写 podfile(而不是: 吊舱“混合面板”, 吊舱“对讲机”, 我用了: 吊舱“对讲机”, 吊舱“混合面板” )

        3. Pod 安装

        将 podfile 中的依赖顺序颠倒,重新构建 pod 即可解决问题。

        【讨论】:

          【解决方案5】:

          我的问题是我的项目中已经有一些 Facebook SDK(FBSDKLoginKit 和 FBSDKCoreKit)。

          我只需要另外一个 SDK (FBSDKShareKit) 并导入它,从而得到“arm64 的未定义符号架构”。

          由于 FBSDKShareKit 依赖于 FBSDKCoreKit 的更新版本,通过更新其他框架,一切都恢复了。

          【讨论】:

            【解决方案6】:

            我的“伞形框架”在构建二级框架时遇到了这个问题。

            我通过更改“通用 iOS 设备”的第一级框架的构建方案解决了这个问题。我认为这会改变 _CodeSignature,当我将整个“伞形框架”推送到 GitHub 时,我看到了不同之处。

            【讨论】:

              【解决方案7】:

              如果您使用由 c++ 编写的 .framework/.a,在其中调用 c++ 代码,则该文件需要更改为 .mm 文件。

              我在那个过程中失去了半天......

              【讨论】:

                【解决方案8】:

                将库放在项目的同一文件夹中,这对我有用

                【讨论】:

                  【解决方案9】:

                  在我在 IOS 中使用 dlib 的情况下,我需要从构建设置/预处理器宏中删除“继承”。

                  【讨论】:

                    【解决方案10】:

                    此链接器错误消息表明定义它的源文件未标记为您的应用程序目标的一部分。找到该源文件,然后使用右侧的文件属性检查器检查您的应用目标的目标成员资格条目。

                    解决方案: 选择文件 -> openFile Inspector -> 查看 Target Membership -> 检查是否未选中目标您正在运行的目标

                    【讨论】:

                      【解决方案11】:

                      希望能帮到你。我添加了框架,问题已经解决了

                      【讨论】:

                        【解决方案12】:

                        Other Linker Flags 中将-ObjC 替换为$(inherited) 解决了我的问题

                        【讨论】:

                        • 你在哪里换的?项目或 pod
                        • 尝试在项目中添加
                        【解决方案13】:

                        如果您使用 m1 (arm64) 并且遇到问题,您可以在 x86 模式下运行它:

                        • 右键单击 xcode 并点击 Get Info 按钮
                        • 勾选Open using Rosetta选项

                        它会很慢,但很有效。

                        【讨论】:

                          【解决方案14】:

                          这个解决方案是唯一对我有用的: 转到 CordovaLib 设置并将 arm64 添加到有效架构。

                          【讨论】:

                            【解决方案15】:

                            调用 pod update 然后从您的 pod 文件中删除 pod 'ARCore',然后再次调用 pod install。然后将 pod 'ARCore' 添加到 pod 文件并再次调用 pod install

                            【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 2021-08-23
                              • 2021-07-25
                              • 2018-11-14
                              • 2015-12-05
                              • 1970-01-01
                              相关资源
                              最近更新 更多