Подтвердить что ты не робот

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

Недавно я переключился на 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 и проверил, что для него установлено значение "Standard (armv6 armv7)".

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

4b9b3361

Ответ 1

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

Ответ 2

Я смог решить эту проблему, выполнив противоположный принятый ответ - я изменил "Только встроенную активную архитектуру" от NO до YES.

Ответ 3

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

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

Ответ 4

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

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

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

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

значение "armv6 armv7", которое отличается от стандартного "armv7 armv7s"

снимите и выберите "Стандарт", это сработало для меня.

Ответ 8

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

Ответ 10

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

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

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

Ответ 11

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

  • Нажмите на файл "Проект" для нарушителя (xcodeproj).

  • Перейдите на вкладку "Информация" для рамки "Проект" (не "Целевой" ).

  • Разверните "Конфигурации" и убедитесь, что оба "Отладки" и "Релиз" имеют 2 конфигурации: один для рамки "Проект" , а другой для рамки "Цель". В случае фреймворков "Target" компилируется в библиотеку, а не в приложение, поэтому легко запутаться.

  • "Отладка" должна иметь проект "Отладка", а библиотека установлена ​​в "Общий"

  • "Релиз" должен иметь проект "Отпустить", а в библиотеке установлен "Общий"

  • Скомпилируйте, запустите и наслаждайтесь.

  • Если вы закончите работу над всем проектом, пытаясь понять это, тогда вам может потребоваться повторная проверка фаз сборки Application Project (как предложил Gon). Библиотека должна быть выделена красным цветом, даже если она не существует на вашем диске. Если нет, до тех пор, пока он установлен в "Общий" , вы должны иметь возможность добавить его обратно.

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

  • О, и вы проверили, чтобы убедиться, что "armv6" есть?:)

Ответ 12

Если я получу предупреждение об игнорировании файла, я запустил бы lipo -info в игнорируемый файл, чтобы найти его как ниже,

lipo -info libTapkuLibrary.a

Это будет печатать либо i386, armv6, armv7, armv7s, x86_64 и т.д. В общем, эта архитектура должна соответствовать вашей целевой платформе сборки. Например.

  • i386 = симулятор ios или 32-битная сборка на mac os x
  • armv6 armv7 arm7s = ios device
  • x86_64 = 64-разрядная версия на mac os x

В зависимости от несоответствия либо вам необходимо перестроить свою библиотеку для целевой платформы, либо изменить целевую платформу.

Примечание. Для жирных двоичных файлов lipo -info напечатает комбинацию из вышеперечисленных архитектур.

Ответ 14

Я попробовал все варианты выше, и никто не работал.

Правильный ответ:

просто перетаскивание рамки в вашем проекте не будет правильно связывать ее (или что-то в этом направлении)

то, что вам нужно сделать, это выбрать фрейм, который вы хотите добавить в Build Phases (щелкните по синему значку проекта, затем выберите название проекта в разделе "Цели", затем вкладка "Сборка фаз" ), см. здесь для получения дополнительной информации.

Ответ 15

Ни один из этих ответов не работал у меня. (Аналогичное предупреждение, другой проект статической библиотеки). Для меня он сконфигурировал XCode, чтобы почтить каталоги сборки целевых объектов, а затем создал целые сборки в локальном каталоге build/, вызвавшем эту проблему. Настройка XCOde для использования папки "Производные данные" исправила ее.

Ответ 16

У меня была эта проблема с библиотекой Three20. Вещь, которая в конечном итоге сделала это для меня, заключалась в переключении формата проекта с Xcode 3.1 на Xcode 3.2 - оставление "build active arch only" только как "нет".

Ответ 17

Имел ту же проблему и пробовал разнообразные решения со страницы безрезультатно. У меня все еще было сообщение о том, что моя библиотека не была создана для arm64.

Наконец, как я его разрешил:

  • открыл файл project.pbxproj для библиотеки в текстовом редакторе
  • искали VALID_ARCHS
  • было 4 вхождения, 2 из которых не содержали arm64
  • Я вручную добавил arm64 в цепочку (VALID_ARCHS = "arm64 i386 armv7 armv7s" )
  • перестроить lib, и все было в порядке

Похоже, что настройки сборки, отображаемые XCode, являются неполными и не соответствуют именно файлу make.