XCode 6.1 Отсутствует требуемая архитектура X86_64 в файле для библиотеки extern

У меня проблема при попытке использовать внешнюю библиотеку: я не могу скомпилировать проект, поскольку он генерирует исключение, как показано ниже.

ld: предупреждение: игнорирование файла /Users/renaudcousin/Documents/XCode/WORK/StimShopPOC/StimShopPOC/libStimhop_SDK.a, отсутствие требуемой архитектуры x86_64 в файле /Users/renaudcousin/Documents/XCode/WORKhop/StimShopPOCTIM/StimShopPOC/StimShopPOC/StimShopPOC/StimShopPOC/ 3 фрагмента) Неопределенные символы для архитектуры x86_64: "_OBJC_CLASS _ $ _ StimhopSDK", ссылка на которую имеется: objc-class-ref в ViewController.o ld: не найдены символы для архитектуры x86_64 clang: error: команда компоновщика завершилась неудачно с кодом выхода 1 ( используйте -v, чтобы увидеть вызов) `

Я пробовал множество решений, найденных в stackoverflow (но для XCode 5.1 и не так хорошо объяснено) без каких-либо изменений ...

Я также нашел эту тему Отсутствует XCode 6.1 требуемая архитектура X86_64 в файле, которая точно соответствует моей проблеме, и при просмотре архитектуры моей библиотеки с помощью команды lipo -info кажется, что в ней отсутствуют i386 и x86_64. Как я могу добавить их в свою библиотечную архитектуру, чтобы иметь возможность компилировать?


person Renaud Cousin    schedule 28.11.2014    source источник
comment
У вас есть источник этой библиотеки? затем вы можете перекомпилировать его, включив новые архитектуры, иначе не   -  person Anil Varghese    schedule 28.11.2014
comment
Нет, это библиотека другого разработчика, поэтому я не могу ее перекомпилировать.   -  person Renaud Cousin    schedule 28.11.2014


Ответы (4)


Это означает, что ваша библиотека .a не содержит архитектуры x86_64 (вы можете запустить lipo -info /path/to/your/lib.a, чтобы проверить это). Если у вас нет исходного кода библиотеки, вам придется изменить свой собственный проект. В настройках сборки измените valid architectures на armv7 и i386 или измените Architectures только на armv7. Однако при этом ваш проект не будет скомпилирован в архитектуру arm64, которая требуется при загрузке в App Store после февраля 2015 года, согласно заявлению Apple.

Если ваша библиотека не содержит архитектуры x86_64, вероятно, она также не содержит arm64. Поэтому вам следует избегать использования старых библиотек.

person Henry H Miao    schedule 28.11.2014
comment
Я знаю, я уже тестировал команду lipo -info, и она пропускает архитектуры i386 и x86_64. Но я не могу избежать использования этой библиотеки, это просьба моих менеджеров создать прототип приложения! - person Renaud Cousin; 28.11.2014
comment
Также пытался установить valid architecture на armv7 и i386 или architecture на armv7, но это только изменило мою проблему, поскольку моя библиотека не включает i386 архитектуру. - person Renaud Cousin; 28.11.2014
comment
Если файл .a не включает архитектуру i386 и x86_64, его нельзя связать с приложением, используемым симулятором iPhone. В этом случае, что бы вы ни делали, при попытке компиляции для симулятора вы получите ошибки компилятора. Единственное, что вы можете сделать, - это запросить версию x86 или отладить приложение на своем реальном устройстве. - person Henry H Miao; 28.11.2014
comment
Вы должны заметить, что симулятор iPhone использует архитектуру x86, а не руку. - person Henry H Miao; 28.11.2014
comment
Да, спасибо. Это то, что я видел. Но я пока пытаюсь скомпилировать прямо на устройстве и всегда получаю какие-то ошибки от архитектуры ... Жду от разработчика библиотеки новую версию. Спасибо всем за ваши ответы :) - person Renaud Cousin; 28.11.2014

Если у библиотеки нет архитектуры X86_64, вы можете построить ее, если вы выбрали подключенное устройство, а не симулятор для своей цели сборки.

По сути, вы все еще можете строить и разрабатывать, но не можете использовать симулятор.

person Chris    schedule 12.10.2016

Щелкните свой проект> настройка сборки> архитектура. Измените архитектуру на armv7 и удалите другие, такие как armv6 и т. Д.. Тогда это будет работать: -  Изображение, где требуется изменение

person shubham mishra    schedule 17.05.2016

В проекте, который собирает libStimhop_SDK.a, убедитесь, что для параметра «Архитектуры» установлено значение $ (ARCHS_STANDARD), и что он включает 64-разрядные параметры в параметрах компилятора. Убедитесь, что параметр «Допустимые архитектуры» также включает 64-разрядную версию.

person Walt Sellers    schedule 28.11.2014
comment
Я уже пробовал это, но это ничего не меняет. Также пробовал ARCHS_STANDART_INCLUDING_64_BITS и добавлял armv7s - person Renaud Cousin; 28.11.2014
comment
Создается ли libStimhop_SDK.a как подпроект, чтобы он строился при сборке приложения? Если нет, вам придется создать толстый двоичный файл, как подробно описано здесь: stackoverflow.com/questions/19010870/fat-libraries-in-xcode-5 ПРИМЕЧАНИЕ: два проекта должны иметь конфигурации с одинаковыми именами. - person Walt Sellers; 28.11.2014