Отсутствует требуемая архитектура x86_64 в файле libCorePlot-CocoaTouch.a
Согласно учебнику Ray Wenderlich, я сделал следующее:
Шаг 1 - Я загрузил CorePlot_1.4.zip на официальном сайте
Шаг 2 - Я добавил в свой проект папку CorePlotHeaders и статическую библиотеку с именем libCorePlot-CocoaTouch.a (проверка "Копирование элементов" в папку целевых групп (если необходимо) ")
Шаг 3 - Я добавил в поле Другие флаги компоновщика следующее: -ObjC
Шаг 4. Я проверил Link Binary с библиотеками, если libCorePlot-CocoaTouch.a и 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)
Я провел несколько часов по этому вопросу... Пожалуйста, помогите...
Ответы
Ответ 1
Если вам нужна 64-разрядная версия Core Plot, вам нужно будет создать новую версию статической библиотеки. Для сборки Arm64 требуется iOS 7, но Core Plot поддерживает более ранние версии, поэтому встроенная библиотека только 32-разрядная.
Откройте CorePlot-CocoaTouch.xcodeproj
и измените параметры архитектуры на "Стандартные архитектуры (включая 64-разрядные)". Либо создайте цель "Универсальная библиотека" и включите результирующую статическую библиотеку вместо той, которая включена в Core Plot 1.4, либо используйте зависимую настройку проекта.
Ответ 2
CorePlot выпустил 1.5.1 для работы с Xcode 5.1. Вам нужно только скопировать папку CorePlotHeaders и файл libCorePlot-CocoaTouch.a в ваш проект.
Вы можете скачать его из здесь.
Ответ 3
Try:
lipo -info libCorePlot-CocoaTouch.a
Он показывает, что библиотека построена для armv7, armv7s и i386 (32-битный симулятор) и не включает в себя 64-битный симулятор. Вам нужно будет построить lib для 64-битного симулятора, после чего вы можете использовать lipo для добавления 64-битного lib в libCorePlot-CocoaTouch.a.
Вывод:
Architectures in the fat file: libCorePlot-CocoaTouch.a are: armv7 armv7s i386
PS: Он не будет работать и на iPhone 5S (без arm64).
EDIT:
Ниже приведены шаги, которые необходимо выполнить для создания двоичного файла с архитектурой arm64 и x86_64:
- скачать CorePlot_1.4 из https://code.google.com/p/core-plot/downloads/detail?name=CorePlot_1.4.zip&can=2&q=
- Откройте проект Xcode (CorePlot-CocoaTouch.xcodeproj), расположенный в CorePlot_1.4/Source/framework
- Выберите "Стандартные архитектуры" для "архитектур" и "Последние iOS (iOS 7)" для "Base SDK"
- Постройте библиотеку (CMD + B)
- Перейти к CorePlot_1.4/Source/build/в терминале
- Запустить липо-образ./Debug-iphoneos/libCorePlot-CocoaTouch.a./Debug-iphonesimulator/libCorePlot-CocoaTouch.a -output core_plot_all.a
- Добавить созданный lib (core_plot_all.a) в ваш проект
- Вы готовы пойти
Ответ 4
измените настройку архитектуры Xcode
![enter image description here]()
Ответ 5
Если вы не хотите проходить процесс загрузки и создания проекта, я создал универсальную библиотеку (для armv7, armv7s и arm64) и поставьте его здесь.
Это построено из идентификатора фиксации coreplot cc0a18cef8915f4a11e0699e9429c0a2f0018b42.
Ответ 6
Я следил за официальным документом Использование основного участка в приложении" в Xcode 7.2.1 с iOS SDK 9.2.
Я получил ту же ошибку, даже если поддерживаемый arm.64, пока я не добавлю флаг компоновщика '-lCorePlot-CocoaTouch' в дополнение к '-OjbC'.
Ответ 7
Если вы пробовали все выше, но все еще не работали, попробуйте установить -ObjC -lCorePlot-CocoaTouch в "Другие флагов компоновщика" в "Настройки сборки" или целевой объект проекта.
Ответ 8
Простейшее решение, которое работает для меня: перейдите в свой проект > настройка сборки > архитектура. Измените архитектуру как armv7 и удалите других, таких как armv6 и т.д., Как показано на рисунке ниже: -
![Изменить обязательный]()
Ответ 9
У меня были такие же ошибки с Xcode7.3 + CocoaPod. И я исправил проблему с помощью других флагов Linker = $(унаследованных).
Конечно, этот параметр действителен только с CocoaPod.