Проблема со связыванием Xcode4.Файл был создан для архива, который не связан с архитектурой (arm6) - PullRequest
51 голосов
/ 14 марта 2011

Недавно я переключился на Xcode4, и когда я компилировал свой проект, я получил следующую ошибку.

ld: warning: ignoring file /Users/myname/Library/Developer/Xcode/DerivedData/appname-hezrgyqimckztgbdlslkavphdclw/Build/Products/Debug-iphoneos/libTapkuLibrary.a, file was built for archive which is not the architecture being linked (armv6)
Undefined symbols for architecture armv6:
  "_OBJC_CLASS_$_TKLoadingView", referenced from:
      objc-class-ref in RootViewController.o

Я открыл TapkuLibrary и проверил, что для ее Архитектур установлено значение «Стандарт (armv6 armv7)».

Что я могу сделать, чтобы решить эту проблему?

Ответы [ 17 ]

111 голосов
/ 14 марта 2011

Я разобрался, что вызвало проблему.Я изменил 'Создать только активную архитектуру' TapkuLibrary с Да на Нет, и он без проблем компилируется.

35 голосов
/ 13 сентября 2011

Я смог решить эту проблему, выполнив противоположное принятому ответу - я изменил 'Build Active Architecture Only' с NO на YES.

11 голосов
/ 20 сентября 2012

Я столкнулся с этой проблемой, когда обновил XCode до 4.5 и iOS до iOS6.Для GMGridView это просто случилось.Не для симулятора, а только для устройства.

Я исправил это, выполнив следующие шаги: 1) Перейдите в проект GMGridView -> Настройки сборки 2) В разделе Настройки -> Архитектура выберите «Стандарт (armv7, armv7s)»

Затем очистите все (включая DerivedData) и восстановите.

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

11 голосов
/ 17 января 2012

Была такая же проблема. Но причина была в другом, я полагаю. Я использовал файл library.a, созданный для симулятора, и попытался запустить его на устройстве ... узнал, что мне нужны разные файлы .a для симулятора и устройства. Надеюсь, это кому-нибудь поможет;)

For example, here I have imported different library files for device and simulator

6 голосов
/ 14 марта 2011

Попробуйте удалить архитектуру armv6 и скомпилировать ее только для armv7.

2 голосов
/ 10 октября 2012

Мне удалось, нажав «недружественный» проект (в моем случае GMGridView). На вкладке «Архитектура» я изменил значение с чего-то (я точно не помню больше, наверное, это было :) «armv7, armv6s» на «armv7, armv7». После этого у меня это сработало.

2 голосов
/ 26 сентября 2012

Это решило проблему для меня:

Некоторые внешние библиотеки, такие как three20, сделали дополнительные настройки для

Настройки сборки-> Архитектуры-> Любой SDK для iOS

значение«armv6 armv7», который отличается от стандартного «armv7 armv7s»

, выпадающий и выберите «Standard», он работал для меня.

2 голосов
/ 26 марта 2012

Что-то еще, что работало для меня, состояло в том, чтобы убедиться, что все подпроекты имеют архитектуру, равную armv6 и armv7, и удостоверились, что для каждого подпроекта установлены TARGET и PROJECT. После очистки и восстановления все работало без проблем.

1 голос
/ 29 июля 2012

Это сработало для меня:

  1. Нажмите на файл проекта Project нарушающей структуры (xcodeproj).

  2. Перейдите на вкладку «Информация» для «Проекта» фреймворка (не «Цель»).

  3. Разверните «Конфигурации» и убедитесь, что в «Отладке» и «Выпуске» установлены 2 конфигурации - одна для «Проекта» фреймворка, а другая для «Целевого» фреймворка. В случае фреймворков 'Target' компилируется в библиотеку, а не в приложение, поэтому легко запутаться.

  4. Для «Отладки» проект должен иметь значение «Отладка», а для библиотеки - «Общий»

  5. «Выпуск» должен иметь для проекта значение «Выпуск», а для библиотеки - «Общий»

  6. Компилировать, запускать и наслаждаться.

  7. Если вы в конечном итоге искали весь свой проект, пытаясь это выяснить, то вы можете дважды проверить фазы сборки проекта вашего приложения (как предложил Гон). Библиотека должна быть там выделена красным, даже если она не существует на вашем диске. В противном случае, если для него установлено значение «Общий», вы сможете снова добавить его.

  8. Если вы действительно действительно испортили свой проект, то вы можете быть вынуждены выбросить папку DerivedData, как предложили руссы. Кроме того, проверьте «Органайзер», так как в Xcode есть способ сохранения дерьма повсюду.

  9. О, а вы проверили, что «armv6» там правильно? :)

1 голос
/ 03 марта 2012

Убедитесь, что варианты сборки в ваших проектах установлены на "normal".

Если вы создаете проект, который включает в себя другие проекты, загляните в папку DerivedData для основного проекта. Изучите архивные файлы с помощью «lipo -info yourarchive.a». Также проверьте временные метки в этих архивах. Возможно, вы обнаружите, что эти библиотеки не перестраиваются или вы пытаетесь установить связь со старой версией архива с неверной архитектурой.

В моем случае я выключил Xcode и удалил папку DerivedData для моего основного проекта. Это привело к полной перестройке, когда я снова открыл основной проект в Xcode 4. При полной перестройке были созданы архивы i386 (или найдена правильная версия) и верна связь версии симулятора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...