首页 文章

架构arm64的未定义符号

提问于
浏览
171

每次从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的各种解决方案,但还没有任何解决方案 .

How do I fix this Apple Mach-O Linker Error?


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

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

30 回答

  • 29

    如果您的 ArchitecturesValid Architectures 都没问题,您可以检查是否已将 $(inherited) (将在pod中生成的链接器标志)添加到 Other Linker Flags ,如下所示:
    enter image description here

  • 1

    问题是cocoapods还没有为arm64架构而构建,因此在构建它们时无法链接它们 . 在更新并使用该架构之前,您可能无法使用这些软件包 . 您可以通过转到项目 - >目标(您的项目名称) - >构建设置并将架构更改为标准体系结构(armv7,armv7s)以及armv7,armv7s的有效体系结构来修复链接器错误 .

    请注意,这意味着您无法获得64位处理器的全部功能 . 你说你正在建造5s,所以可能有一些原因你需要这个 . 如果你出于某种原因绝对需要这种能力(也许你正在构建一个游戏),并且迫切需要这些文件,你可以提交一个拉取请求,然后通过在你从中提取的文件中将那些相同的字段设置为arm64,将项目重新编译为arm64开源项目 . 但是,除非你真的需要这些文件是64位兼容的,否则现在看起来有点过分 .

    编辑:有些人还报告说,将Build For Active Architectures设置为YES也是解决此问题的必要条件 .

    截至2014-04-28,设置应如下所示:

    enter image description here

  • 24

    我通过设置:解决了这个问题:

    ARCHS = armv7 armv7s

    VALID_ARCHS = armv6 armv7 armv7s arm64

  • 0

    我遇到了实现 AVPictureInPictureController 的相同/类似问题,问题是我没有在项目中链接 AVKit 框架 .

    错误消息是:

    Undefined symbols for architecture armv7:
       "_OBJC_CLASS_$_AVPictureInPictureController", referenced from:
           objc-class-ref in yourTarget.a(yourObject.o)
    ld: symbol(s) not found for architecture armv7
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    

    The Solution:

    • 转到 Project

    • 选择你的 Target

    • 然后,转到 Build Phases

    • 打开 Link Binary With Libraries

    • 最后,只需添加 + AVKit framework /任何其他 framework .

    希望这可以帮助其他人遇到类似的问题 .

  • 3

    我也遇到了同样的问题,上面的方法都行不通 . 我不小心删除了下面目录中的文件 .

    文件夹安置:

    〜/资源库/开发/ Xcode中/ DerivedData /

    enter image description here

  • 0

    为项目中的每个目标设置 Architecturesarmv7 armv7sBuild Active Architecture OnlyNO ,包括 every one in Pods

  • 16

    我通过检查右侧目标成员资格中的选定实施文件来修复我的问题 . 这在处理扩展即自定义键盘时尤其有用 .

    Target Membership

  • 2

    解释为什么build_active_architecture设置为NO . Xcode现在可以检测您已连接的设备,并相应地设置活动架构 . 因此,如果您将第二代iPod Touch插入计算机,Xcode应将活动架构设置为armv6 . 使用上面的Debug配置构建你的目标现在只会构建armv6二进制文件以节省时间(除非你有一个庞大的项目,你可能没有注意到差异,但我想随着时间的推移,秒数会增加) .

    当您创建用于发布到App Store的分发配置时,您应该确保未设置此选项,以便您构建胖通用二进制文件http://useyourloaf.com/blog/2010/04/21/xcode-build-active-architecture-only.html

  • 216

    删除DerivedData - > Build - > Products - > Debug-iphoneos的内容后解决

  • 4

    您需要从 Valid Architecture 中删除 arm64 并将 NO 设置为 Active Architecture Only . 现在只需清理,构建和运行 . 您不会再次看到此错误 .

    :) KP

  • 11

    我通过将有效的archs设置为armv7 armv7s并将构建活动体系结构设置为仅在发布中的YES然后从命令行执行新的“pod install”来解决它

  • 52

    鉴于iPhone 5s还没有收到64位版本的第三方库,我不得不使用最新的Xcode回到32位模式(5.1之前没有抱怨) .

    我通过从Valid Architectures列表中删除arm64,然后将Build Active Architecture Only设置为NO来修复此问题 . 在我看来,这更有意义比如上所示的其他方式 . 我发帖以防其他人无法获得上述任何解决方案 .

  • 2

    升级到Xcode 5.1后我遇到了同样的问题并通过将 Architectures 设置为 armv7 armv7s 来修复它

  • 0

    一整天都被困在这个问题上 .

    我有多个Schemes,它正在编译Demo,Internal,Release - 但是Debug方案只是不能编译并且抱怨libPods.a缺失 .

    解决方案是转到Project - > Target - > Build Settings并将“Build Active Architecture Only”更改为YES . 清洁和建造!最后几个小时头痒解决了!

  • 119

    这可能与 libz.dyliblibz.tbd 有关,只需将其添加到链接二进制文件的目标,并尝试再次编译 .

  • 0

    在目标的Build Settings中将 -ObjC 设置为 Other Linker Flags 解决了问题 .

  • 33

    这对我有用:

    ios sdk 9.3

    into your build setting of app.xcodeproj 有效架构:armv7 armv7s构建活动架构:没有

    清洁和建造,为我工作 .

  • 1

    下面的工作让我在64位模拟器和视网膜iPad Mini的Xcode 5.1上无错误地编译GPUImage,而无需从有效架构列表中删除arm64(这违背了拥有64位设备进行测试的目的64位性能) .

    从GitHub页面下载.zip文件夹:https://github.com/BradLarson/GPUImage

    解压缩,然后导航到“framework”文件夹 . 从这里,添加“Source”文件夹并将其复制到Xcode项目中 . 确保勾选“将项目复制到目标组的文件夹”,并勾选“为任何添加的文件夹创建组” . 这会将通用,iOS和Mac标头/实现文件复制到您的项目中 .

    如果您因为编译iOS而不需要Mac文件,则可以在将文件复制到项目之前删除Mac文件夹,或者只是从Xcode中删除该组 .

    将Source文件夹添加到项目后,只需使用以下内容开始使用GPUImage的类/方法:

    #import "Source/GPUImage.h"
    

    有几点需要指出:

    • 如果收到错误提示'Cocoa'未找到,您已将Mac文件夹/ Headers 添加到iOS项目中 - 只需从项目中删除Mac组/文件,警告就会消失

    • 如果重命名Source文件夹(不是Xcode中的组),请在#import指令中使用该名称而不是"Source/GPUImage.h" . 因此,如果在添加到项目之前将文件夹重命名为GPUImageFiles,请使用:#import“GPUImageFiles / GPUImage.h

    • 显然确保在Valid Architectures列表中选择arm64以利用A7 64位处理器!

    • 这不是GPUImage.framework包(例如,如果您从http://www.raywenderlich.com/60968/ios-7-blur-effects-gpuimage下载了框架),因此它可能不是使用Brad Larson所期望的GPUImage的正确方法,但它适用于我当前的SpriteKit项目 .

    • 没有必要链接到框架/库等 - 只需导入头和实现源文件夹,如上所述

    希望上面有所帮助 - 尽管问题被多次询问,似乎没有明确的指示,但不要担心,GPUImage肯定适用于arm64架构!

  • 1

    通过Podfile和 pod install 安装pod后,我遇到此问题 . 在尝试了一堆不同的修复后,我终于手动导入了Pod(将必要的文件拖到我的项目中),这解决了问题 .

  • 1

    morisunshine回答指向正确的方向时,他的回答中的一点调整解决了我对iOS8.2的问题 . 谢谢他 .

    我通过设置:解决了这个问题:

    ARCHS = armv7
    
    VALID_ARCHS = armv6 armv7 armv7s arm64
    
    BUILD ACTIVE ARCHITECTURE ONLY= NO
    
  • 0

    就我而言,我不得不寻找

    C++ Standard Library 并确保 libc++ 是所选的 .

  • 3

    对我来说,我在xcode 7.2中使用opencv 2.4.9 for iOS并且发生了上述错误,我使用opencv通过pod安装而不是离线opencv框架来解决错误 .

    您可以尝试添加下面的opencv pod文本,如果已经使用,则删除脱机opencv框架 .

    pod'OpenCV','2.4.9'

  • 1

    没有解决方案在我的情况下修复此错误(Xcode 9),使用 TesseractOCRiOS . 经过几个小时的反复试验,我想出了一个很好的解决方案 . 我只是删除 Podfile 中的 'pod 'TesseractOCRiOS', '~> 4.0.0' ,运行 pod install . 然后,将 pod 'TesseractOCRiOS', '~> 4.0.0' 添加回 Podfile 并再次运行 pod install .

    砰!有用!

  • 5

    在某些情况下,如果您在.h文件中定义了另一个接口,但没有全部实现这些界面发生了这个错误 .

    链接器无法在.m文件中找到实现,因此您需要在.m文件中为每个接口实现它 .

    要解决此错误:

    1.in .m文件,为每个接口提供实现 . 2.rebuild

  • 0

    在安装AWS框架以解决此问题后,我遇到了同样的问题,我已经从安装AWS POD后创建的项目更新了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 设置为$(继承)

  • 3
    • 转到目标构建设置 .

    • set BUILD ACTIVE ARCHITECTURE ONLY = NO,用于Debug和Release

    • 构建并运行

  • 1

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

  • 3

    添加“Security.framework”为我做了诀窍 .

  • 1

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

    • 删除所有pod(pod init,pod install)

    • 以相反的顺序重写podfile(而不是:pod“Mixpanel”,pod“Intercom”,我用过:pod“Intercom”,pod“Mixpanel”)

    • Pod安装

    颠倒podfile中的依赖项顺序并重建pod已解决了这个问题 .

  • 3

    "The OPN [Debug] target overrides the OTHER_LDFLAGS build setting" . 这是主要问题 . 在其他链接器标志的新行中添加$(继承)解决了我的问题 .
    enter image description here

相关问题