IOS - Ошибка Linker после обновления до Xcode 4.5, возможно, связанного с Core Plot

Я только что обновился до Xcode 4.5GM и убрал некоторые экраны в моем iPhone-проекте, чтобы справиться с дополнительным размером экрана на iPhone 5. Проект нацелился на iOS 5.1, и я только что придумал его для моего телефона, и я получаю эту ошибку компоновщика:

файл является универсальным (2 среза), но не содержит (n) armv7s slice: /Users/JonathanW/Documents/MyXcode/myApp/myApp/CorePlot/libCorePlot -CocoaTouch.a для архитектуры armv7s

Я использую статическую библиотеку Core Plot 1.0 в моем проекте и до сих пор не имел никаких проблем с ней. Оглядываясь, я вижу похожие ошибки, связанные с настройками архитектуры сборки, но не уверен, куда идти отсюда. Проект отлично работает в симуляторе (оба iOS 5.1 и iOS 6). Любые идеи?

Ответы

Ответ 1

По внешнему виду вам понадобится перестроить библиотеку libCorePlot с помощью Xcode 4.5GM, чтобы там была построена библиотека ARMV7S. Кажется, что он пытается использовать версию, которую вы создали с помощью старого Xcode.

Ответ 2

Я также использую статическую библиотеку Core Plot 1.0 в своем проекте. Я смог решить проблему, установив Только встроенные активные архитектуры Да. Создание активных архитектур Только в разделе "Архитектура" целевых настроек сборки в Xcode.

Я загрузил zip файл Core Plot 1.0, который кажется неполным, поэтому я не могу перестроить библиотеки.

Ответ 3

Он работает в симуляторе, потому что симулятор всегда будет использовать архитектуру i386. Это не изменилось с новым SDK. Изменилось присутствие iPhone 5, в котором используется новая архитектура (armv7s). Проект для вашего приложения автоматически добавил armv7s в качестве допустимой архитектуры, но библиотека, вероятно, была скомпилирована без знания этого. Таким образом, ваше приложение, поддерживающее arm7s, пытается связать с библиотекой, которая была построена без armv7s, и не работает.

Чтобы исправить это, вам просто нужен доступ к проекту, который создает библиотеку. Измените параметр "Действительная архитектура" на цели, чтобы включить armv7, а затем перестройте.

Ответ 4

Я боролся с этим в течение нескольких дней и, наконец, смог заставить его работать, создав новую статическую библиотеку.

Я использовал систему управления Mercurial Source Code с помощью инструкций здесь: Создать статическую библиотеку с использованием Mecurial и "Установка статической библиотеки Core-Plot" "из wiki, найденного здесь: Как сделать статическую библиотеку Установка Core-Plot

Я отправляю это для таких людей, как я, с низким опытом, так как это довольно просто и объясняется самим собой.

Ответ 5

Вы сделали чистую и перестроенную? Также проверьте, что у вас есть armv6 и armv7 в архитектурах. Возможно, вам придется перекомпилировать ваши цели и повторно добавить библиотеки в целевые

Ответ 6

Переключить компилятор в проект CorePlot из Apple LLVM Compiler 4.1 в LLVM GCC 4.2

Ответ 7

Просто я скомпилировал библиотеку основного сюжета и выполнил установку зависимого проекта по этой ссылке http://code.google.com/p/core-plot/wiki/UsingCorePlotInApplications
и каждый предмет похож на обаяние (мой проект теперь без проблем работает как с armv7, так и с armv7), кроме того, я все еще устанавливаю Build Active Architecture только в NO, чтобы поддерживать все архитектуры

Ответ 8

Вам просто нужно удалить armv7 из списка допустимых архитектур.

просто выполните следующие действия. -Выберите свой проект из Навигатора проектов -Выберите цель из списка целей -Выберите вкладку настроек сборки -Найдите параметр "Действительные архитектуры". Он должен сказать armv7 armv7s. Удалите armv7s, и в ваших действительных архитектурах будет только armv7. Теперь ваш проект будет правильно скомпилирован.

Ответ 9

Исправить ошибки компоновщика для Core Plot при использовании Xcode 5

Я много лет использую Core Plot и получаю кучу ошибок "Apple Mach-O Linker Warning" о том, что armv7s не поддерживает определенные файлы в обновленной папке "CorePlotHeader" (удаленная папка в настоящее время в моем проекте и перетащил новую папку в мой проект), чтобы отразить изменения CorePlot_1.4. Я также удалил старую библиотеку libCorePlot-CocoaTouch.a и ввел ее в мою папку Framework. Все работало отлично в симуляторе, но я не мог построить свой iPad 4 с iOS 7.0.2.

Вот единственное, что я нашел, что работает, когда отладка (кажется, работает при архивировании и т.д.):

1) Сделайте все, о чем я упоминал выше, настройте Build Active Architect на No, а затем очистите

2) Возможно, возникла ошибка в том, что архитектура "arm64" не поддерживается, поэтому удалите "arm64" из раздела "Действительная архитектура" в настройках сборки

3) Щелкните правой кнопкой мыши на файле "MyApp.app" в папке "Продукты" при отладке, и вы можете увидеть старый "libCorePlot-CocoaTouch.a" (если измененная дата предшествует 9/28/13), компиляция с ваше приложение.

4) Удалите эту библиотеку и скопируйте новую в папку сборки, очистите, затем перестройте

Это работает для метода "Установка статической библиотеки" и не тестировалось с использованием метода "Зависимая установка проекта".

Ответ 10

Я использую статическую библиотеку Core Plot 1.0 для iOS 6.1 в Xcode 4.4. После обновления до Xcode 4.5 с iOS 7.0 я столкнулся с той же проблемой, что и ваш.

Чтобы исправить это, я удалил папку CorePlotHeaders и libCorePlot-CocoaTouch.a в моем проекте. Если вы удалите его в Xcode, выберите вариант "Переместить в корзину".

Затем я загружаю CorePlot_1.4.zip из https://code.google.com/p/core-plot/downloads/list, затем я следую за установкой статической библиотеки из https://code.google.com/p/core-plot/wiki/UsingCorePlotInApplications

Надеюсь, что это поможет