缺少文件libCorePlot-CocoaTouch.a中所需的体系结构x86_64

时间:2013-11-28 11:11:08

标签: ios iphone xcode xcode5 core-plot

根据Ray Wenderlich tutorial,我完成了以下操作:

第1步 - 我在官方网站上下载了 CorePlot_1.4.zip

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

第3步 - 我在其他链接标记字段中添加了以下内容: -ObjC

第4步 - 如果 libCorePlot-CocoaTouch.a 并且 Link Binary with Libraries > QuartzCore 框架在这里

结果: 当我编译项目时,当我使用 Iphone Retina(4英寸)时,它可以正常工作。但是当我使用 Iphone Retina(4英寸64位)时 当我尝试构建并运行时,我收到以下消息:

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)

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

9 个答案:

答案 0 :(得分:19)

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

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

答案 1 :(得分:14)

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

您可以从here下载。

答案 2 :(得分:13)

尝试:

lipo -info libCorePlot-CocoaTouch.a

它显示该库是为armv7,armv7s和i386(32位模拟器)构建的,并且不包括64位模拟器。你必须为64位模拟器构建lib,之后你可以使用lipo将64位lib添加到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=
  2. 下载CorePlot_1.4
  3. 打开位于CorePlot_1.4 / Source / framework
  4. 中的Xcode项目(CorePlot-CocoaTouch.xcodeproj)
  5. 为“架构”选择“标准架构”,为“基础SDK”选择“最新iOS(iOS 7)”
  6. 构建库(CMD + B)
  7. 转到终端
  8. 中的CorePlot_1.4 / Source / build /
  9. 运行lipo -create ./Debug-iphoneos/libCorePlot-CocoaTouch.a ./Debug-iphonesimulator/libCorePlot-CocoaTouch.a -output core_plot_all.a
  10. 将新创建的lib(core_plot_all.a)添加到项目中
  11. 你准备好了

答案 3 :(得分:6)

更改Xcode架构的设置

enter image description here

答案 4 :(得分:5)

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

这是根据coreplot提交ID cc0a18cef8915f4a11e0699e9429c0a2f0018b42构建的。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

如果您尝试了以上所有但仍然无效,请尝试将-ObjC -lCorePlot-CocoaTouch设置为'其他链接标记'在'构建设置'或您的项目目标。

答案 7 :(得分:0)

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

Change required

答案 8 :(得分:0)

我在Xcode7.3 + CocoaPod上遇到了同样的错误。我用Other Linker Flags = $(继承)修复了这个问题。

当然,此设置仅对CocoaPod有效。