Архитектура Arm64 в xcode 5.1
в новом XCode 5.1 arm64 стал одной из стандартных архитектур для сборки.
однако в текущих проектах я включил библиотеки (например, Google AdMob), которые еще не поддерживают эту новую архитектуру - теперь они вызывают ошибки компоновщика:
ld: symbol(s) not found for architecture arm64
Google AdMob 6.8.0 например сказал, что поддерживает arm64 но я не могу подтвердить это, если cputype (16777228) cpusubtype (0)
это arm64? (найдено в командной строке файла инструмент)
libGoogleAdMobAds.a: Mach-O universal binary with 5 architectures
libGoogleAdMobAds.a (for architecture armv7): current ar archive random library
libGoogleAdMobAds.a (for architecture armv7s): current ar archive random library
libGoogleAdMobAds.a (for architecture i386): current ar archive random library
libGoogleAdMobAds.a (for architecture x86_64): current ar archive random library
libGoogleAdMobAds.a (for architecture cputype (16777228) cpusubtype (0)): current ar archive random library
есть ли способ сделать это?
6 ответов:
от него не так уж трудно избавиться arm64 на данный момент. все, что вам нужно сделать, это:
редактировать цель ' s Параметры Построения. Измените значение на
Architectures
открыв выпадающее меню, нажмите на другие... и выберите его, удалите строку со значением$(ARCHS_STANDARD)
и добавить две строки со значениями:armv7
иarmv7s
(или$(ARCHS_STANDARD_32_BIT)
как отметил nschum), закройте всплывающее окно.изменить значение
Valid Architectures
и просто удалитьarm64
часть.сделайте это для каждого вложенного проекта, который может быть внутри вашего рабочего пространства или проекта.
Примечание: это не решение, это всего лишь несколько шагов, чтобы смягчить вашу текущую проблему, пожалуйста продолжайте следить за своими проектами зависимостей, чтобы узнать, когда они поставляются с совместимостью arm64, и как можно скорее отменить изменение этих параметров.
удачи
начиная с Xcode 5.1 $(ARCHS_STANDARD) теперь включает arm64(а также armv7 и armv7s), тогда как с Xcode 5.02, $(ARCHS_STANDARD) включены только armv7 и armv7s.
Для Xcode 5.1
$(ARCHS_STANDARD) = armv7 armv7s arm64
$(ARCHS_STANDARD_32_BIT) = armv7 armv7s
Так что если вы должны скомпилировать в 64-разрядной версии, то вам нужно убедиться, что все включенные библиотеки имеют 64-разрядный срез. Если их еще нет поддержка 64-разрядная, то вам придется компилировать в 32-разрядную.
но в любом случае, в настройках сборки ваших целей вам нужно убедиться, что как Achitectures, так и действительные Achitectures установлены одинаково и что они совпадают (см. изображения ниже). Таким образом, вы можете попробовать их оба с $(ARCHS_STANDARD), и если он не будет компилироваться, то вы можете попробовать их оба с $(ARCHS_STANDARD_32_BIT), который теоретически удалит ошибки и скомпилирует рабочий проект.
-
как это для 64-бит с arm64 armv7s и armv7:
-
или как это для 32-бит с armv7s и armv7 только (без arm64):
в настройках сборки для вашей цели измените "допустимые архитектуры" только на те, которые вы поддерживаете; вероятно, armv7 и armv7s в этом случае.
Если вы используете Cocoapods, обязательно измените это для всех целей в проекте Pods и установите для всех этих целей "строить только активную архитектуру" на " нет " для всех схем.
небольшое изменение в вашем подфайле для автоматического удаления 64-разрядной архитектуры сборки из ваших целей cocoapods подробно здесь: http://cameronspickert.com/2014/01/20/remove-the-arm64-architecture-from-cocoapods-targets
настройка архитектуры $(ARCHS_STANDARD_32_BIT) на XCode 5.1 работает. Нет необходимости удалять arm64 из допустимых архитектур.
архитектура определяет фактические архитектуры для построения и будет игнорировать запись arm64 в допустимых архитектурах (которая определяет надмножество). Надеюсь, Apple исправит это в ближайшее время.
У меня была такая же ошибка. Загрузка новой версии Google AdMob SDK 6.8.0 решила проблему. Вот ссылка: https://developers.google.com/mobile-ads-sdk/download#downloadios
таким образом, отключение архитектуры arm64 не требуется.
нет из ответов работал для меня.
Я, наконец, представил мое приложение установки старого Xcode 5.0.2 кроме того с Xcode 5.1
Использовал эту версию Xcode для архивирования приложения без ошибок.
Скачать старую версию Xcode 5.0.2здесь (вы должны войти в систему с вашим идентификатором Apple ID):