根据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)
我在这个问题上花了几个小时......请帮忙......
答案 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架构的二进制文件,您需要执行以下步骤:
答案 3 :(得分:6)
更改Xcode架构的设置
答案 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)
答案 8 :(得分:0)
我在Xcode7.3 + CocoaPod上遇到了同样的错误。我用Other Linker Flags = $(继承)修复了这个问题。
当然,此设置仅对CocoaPod有效。