架构arm64的未定义符号

Gan*_*ham 192 xcode ios cocoapods xcode5

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

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

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

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

我一直在尝试使用SO的各种解决方案,但还没有任何解决方案.

如何修复Apple Mach-O链接器错误?


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

Ignoring file ~/Library/Developer/Xcode/DerivedData/SomeApp/Build/Products/Debug-iphoneos/libPods.a, 
Run Code Online (Sandbox Code Playgroud)

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

cha*_*yWu 241

如果您的架构有效架构都正常,您可以检查是否已添加$(inherited)(将在pod中生成的链接器标志)添加到 其他链接器标志,如下所示: 在此输入图像描述

  • `$(inherited)`默认已存在! (15认同)
  • @chancyWu你能解释一下吗? (7认同)
  • 如果这仍然不起作用,也将@(继承)添加到库搜索路径. (4认同)
  • 我正在使用Xcode 7.2和其他链接器标志 - >调试我看到:-weak_framework CoreFoundation -weak_framework UIKit -weak_framework AVFoundation -weak_framework CoreMedia -weak-lSystem -ObjC ...这里我添加了$(继承)但它没有'工作 (2认同)

Ada*_*amG 122

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

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

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

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

在此输入图像描述

  • 这不再是一个解决方案.Apple现在要求为所有部署支持64位. (55认同)
  • 刚来这里加入合唱:为BUILD FOR ACTIVE ARCHITECTURES选择YES是最好的选择. (8认同)
  • 好的,我通过将Build For Active Architectures设置为Yes来实现此目的.非常感谢! (7认同)
  • 这解决了错误,为了在模拟器上运行,但是,它没有解决在设备上运行的错误.pods因libPods.a被拒绝,因为它的架构''(由于某种原因,它没有检测到它 - 尽管我可以在Xcode中看到它)并不包含所有必需的架构'armv7 armv7s' (4认同)
  • 另外:您可以在终端中使用`file`命令来告诉静态库支持哪些体系结构. (2认同)

mor*_*ine 52

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

ARCHS = armv7 armv7s

VALID_ARCHS = armv6 armv7 armv7s arm64


val*_*u17 40

我遇到了相同/类似的问题实现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)
Run Code Online (Sandbox Code Playgroud)

解决方案:

  1. 转到您的项目
  2. 选择你的目标
  3. 然后,转到Build Phases
  4. 用库打开链接二进制文件
  5. 最后,只需添加+AVKit 框架 /任何其他框架.

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

  • 是的,值得一提的是,如果您错过了一个框架,这是一个错误.一个线索是你尝试删除架构,下一个/剩下的一个也失败了...... (6认同)

ylg*_*hyh 33

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

文件夹安置:

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

在此输入图像描述

  • 谢谢!我想添加一个提示:该文件夹位于/ User/yourname/Library/Developer/XCode/DerivedData下 (7认同)
  • 虽然这看起来很奇怪,但这确实有效.谢了哥们. (3认同)
  • 手动删除派生数据,也对我有用。干杯! (2认同)

Bab*_*nda 25

架构ARMv7的 armv7s,构建有源体系只有NO,在项目的每个目标,包括每一个豆荚


jay*_*ixz 16

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

目标会员


Moa*_*eed 11

解释为什么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


小智 5

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


Ton*_*ony 5

这可能与libz.dylibor相关libz.tbd,只需将其添加到链接二进制文件的目标中,然后再次尝试编译。


Kal*_*ara 5

您只需要从有效架构中删除arm64并将NO设置为仅Active Architecture。现在,只需清洁,构建和运行即可。您将不会再看到此错误。

:) KP


Dee*_*pak 5

以下对我有用:

  1. 删除所有 Pod cd ios && pod deintegrate
  2. 将此行注释在ios/Podfile->use_flipper!()
  3. 重新安装所有 Podarch -x86_64 pod install
  4. 运行您的应用程序:)npm run ios

环境:
节点版本:14.17.1
RN 版本:6.0.0
操作系统:macOS BigSur m1