【问题标题】:missing required architecture x86_64 in file libCorePlot-CocoaTouch.a文件 libCorePlot-CocoaTouch.a 中缺少所需的架构 x86_64
【发布时间】:2013-12-14 09:35:35
【问题描述】:

根据Ray Wenderlich tutorial,我做了以下事情:

Step 1 -我在官网下载了CorePlot_1.4.zip

第 2 步 - 我在我的项目中添加了 CorePlotHeaders 文件夹名为 libCorePlot-CocoaTouch.a 的静态库(检查“将项目复制到目标组的文件夹(如果需要)”

第 3 步 - 我在 Other Linker Flags 字段 中添加了以下内容:-ObjC

第 4 步 - 如果 libCorePlot-CocoaTouch.a,我检查了 Link Binary with Libraries >QuartzCore 框架在这里

结果:当我编译我的项目时,当我使用 Iphone Retina (4-Inch) 时它运行良好。但是当我使用 Iphone Retina (4-Inch 64-bit) 我在尝试构建和运行时收到以下消息:

ld: warning: ignoring file /blah/blah/libCorePlot-CocoaTouch.a, missing required architecture x86_64 in file /blah/blah/libCorePlot-CocoaTouch.a (3 slices)

完整信息如下:

ld: warning: ignoring file /Users/me/Desktop/project/libCorePlot-CocoaTouch.a, missing required architecture x86_64 in file /Users/me/Desktop/project/libCorePlot-CocoaTouch.a (3 slices)
Undefined symbols for architecture x86_64:
"_CPTDecimalFromCGFloat", referenced from:
  -[PatientConstanteVisualiser configurePlots] in PatientConstanteVisualiser.o
  -[PatientConstanteVisualiser configureAxes] in PatientConstanteVisualiser.o
"_CPTDecimalFromInteger", referenced from:
  -[PatientConstanteVisualiser configureAxes] in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTAxisLabel", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTColor", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTFill", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTMutableLineStyle", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTMutableTextStyle", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTPlotSymbol", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTScatterPlot", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTTheme", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTXYGraph", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_kCPTStocksTheme", referenced from:
  -[PatientConstanteVisualiser configureGraph] in PatientConstanteVisualiser.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我在这个问题上花了几个小时...请帮助...

【问题讨论】:

  • 改变xcode的架构
  • i 坚韧的 coreplot 不支持 64 位架构确实检查了
  • 不,我已经在另一个项目中使用过 Core Plot,并且能够使用 Iphone Retina(4 英寸 64 位) 运行它。但是我找不到为什么它在我的新项目中不起作用...
  • 现在检查我的答案@

标签: ios iphone xcode xcode5 core-plot


【解决方案1】:

如果您想要 64 位版本的 Core Plot,则必须构建新版本的静态库。 Arm64 构建需要 iOS 7,但 Core Plot 也支持更早的版本,因此预构建的库仅为 32 位。

打开 CorePlot-CocoaTouch.xcodeproj 并将架构设置更改为“标准架构(包括 64 位)”。构建“通用库”目标并包含生成的静态库来代替 Core Plot 1.4 中包含的静态库,或者改用依赖项目设置。

【讨论】:

  • 是的,它有效!这很奇怪,因为我不需要在其他项目中做所有这些事情,而且它在 32 位或 64 位模拟器上都像一个魅力......
  • 我接受这个答案,因为它有效。但是 Ivan Genchev 的答案也很有效。非常感谢 Ivan 和 Eric。
  • 嘿 Eric,我有一个关于 CorePlot-CocoaTouch.xcodeproj 的问题。它不会打开,并说“project.xcworkspace”无效并且“project.pbxproj”丢失。怎么了?
  • CorePlot-CocoaTouch.xcodeproj 不依赖于任何其他项目或工作区。你用的是什么版本?它是如何安装的(从 GitHub、从发布包等)?
  • 我刚刚更新到 XCode 5.1,现在才看到这个问题。不过,从 Core Plot 构建通用库似乎并不能解决任何问题——我仍然遇到与 Erzekiel 相同的错误。 5.1 中有什么新功能可以解决这个问题吗?
【解决方案2】:

CorePlot 已发布 1.5.1 以与 Xcode 5.1 一起使用。您只需将 CorePlotHeaders 文件夹和 libCorePlot-CocoaTouch.a 文件复制到您的项目中即可。

您可以从here下载。

【讨论】:

  • 非常感谢,没有更多的arm64问题,只是一个小注释CorePlotHeaders文件夹和libCorePlot-CocoaTouch.a在CorePLor_1.5.1.zip的Binaries\iOS文件夹中。像魅力一样工作。
  • 你能告诉我在哪里可以找到 CorePlotHeaders 文件夹吗?
【解决方案3】:

试试:

lipo -info libCorePlot-CocoaTouch.a

显示该库是为 armv7、armv7s 和 i386(32 位模拟器)构建的,不包括 64 位模拟器。您必须为 64 位模拟器构建库,然后您可以使用 lipo 将 64 位库添加到 libCorePlot-CocoaTouch.a。

输出:

Architectures in the fat file: libCorePlot-CocoaTouch.a are: armv7 armv7s i386

PS:它在 iPhone 5S 上也不行(没有 arm64)。

编辑:

为了生成包含 arm64 和 x86_64 架构的二进制文件,您需要执行以下步骤:

  1. https://code.google.com/p/core-plot/downloads/detail?name=CorePlot_1.4.zip&can=2&q=下载CorePlot_1.4
  2. 打开位于 CorePlot_1.4/Source/framework 的 Xcode 项目 (CorePlot-CocoaTouch.xcodeproj)
  3. 为“架构”选择“标准架构”,为“基础 SDK”选择“最新 iOS (iOS 7)”
  4. 构建库 (CMD+B)
  5. 在终端中转到 CorePlot_1.4/Source/build/
  6. 运行 lipo -create ./Debug-iphoneos/libCorePlot-CocoaTouch.a ./Debug-iphonesimulator/libCorePlot-CocoaTouch.a -output core_plot_all.a
  7. 将新创建的库 (core_plot_all.a) 添加到您的项目中
  8. 你准备好了

【讨论】:

  • 我不知道 lipo 是什么。你能解释一下我在哪里可以找到它吗?
  • 它是一个命令行工具。如果您想了解有关 lipo 的更多信息,可以在命令行上尝试 man 1 lipo。如果您不熟悉 bash,您也可以打开 CorePlot-CocoaTouch.xcodeproj 并自己构建库(在添加所需的架构之后)。
  • 您可以打开项目(CorePlot-CocoaTouch.xcodeproj),然后您必须将基础SDK更改为“最新iOS(iOS 7)”并将架构设置为“标准架构”,构建项目 (CMD+B) 并且在您将在两个单独的目录中拥有两个库之后 (/proj_dir/.../Debug-iphoneos/libCorePlot-CocoaTouch.a 和 /proj_dir/.../Debug-iphonesimulator/libCorePlot -CocoaTouch.a) 然后你可以使用 lipo 来合并它们: lipo -create ../Debug-iphoneos/libCorePlot-CocoaTouch.a ../Debug-iphonesimulator/libCorePlot-CocoaTouch.a -output core_plot_all.a.跨度>
  • 我在终端中使用了 lipo。这是我的结果:胖文件中的架构:/Users/me/Desktop/project/libCorePlot-CocoaTouch.a 是:armv7 (cputype (12) cpusubtype (11)) i386
  • 那是你已经拥有的图书馆。您必须下载 Core Plot 项目,自己构建库,之后您必须使用“lipo -create”,就像我在之前的评论中解释的那样,因为您当前文件中没有所需的架构。 "lipo -info" 只是显示 fat 文件中的当前架构。
【解决方案4】:

更改 Xcode 架构的设置

【讨论】:

  • @Erzékiel 尝试新答案
【解决方案5】:

如果您不想经历下载和构建项目的过程,我构建了通用库(用于 armv7、armv7s 和 arm64)和put it up here

这是从 coreplot 提交 id cc0a18cef8915f4a11e0699e9429c0a2f0018b42 构建的。

【讨论】:

    【解决方案6】:

    我在 Xcode 7.2.1 中使用 iOS SDK 9.2 遵循官方文档“Using Core Plot In An Application”。 即使 .a 支持 arm64,我也遇到了同样的错误,直到我在“-OjbC”之外添加了链接器标志“-lCorePlot-CocoaTouch”。

    【讨论】:

      【解决方案7】:

      如果您尝试了以上所有方法但仍然无法正常工作,请尝试在“构建设置”或您的项目目标中将 -ObjC -lCorePlot-CocoaTouch 设置为“其他链接器标志”。

      【讨论】:

        【解决方案8】:

        最适合我的解决方案:转到您的项目 > 构建设置 > 架构。将架构更改为 armv7 并删除其他架构,如 armv6 等,如下图所示:-

        【讨论】:

        • 如果你想在64位模拟器下测试呢?
        【解决方案9】:

        我在使用 Xcode7.3 + CocoaPod 时遇到了同样的错误。我用 Other Linker Flags= $(inherited) 解决了这个问题。

        当然,这个设置只对 CocoaPod 有效。

        【讨论】:

          猜你喜欢
          • 2015-10-10
          • 2013-10-15
          • 2016-02-03
          • 2014-12-20
          • 1970-01-01
          • 1970-01-01
          • 2015-04-23
          • 1970-01-01
          • 2015-01-26
          相关资源
          最近更新 更多