Неопределенные символы для архитектуры arm64
Я получаю ошибку компоновщика Apple Mach-O каждый раз, когда я импортирую файл из CocoaPods.
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_FBSession", referenced from: someFile
ld: symbol(s) not found for architecture arm64
Я получаю около 12 из них, для различных стручков, которые я использую.
Я пытаюсь построить для iPhone 5S с помощью XCode 5.
Я пробовал различные решения здесь на SO, но еще не получил ни одного из них для работы.
как исправить эту ошибку компоновщика Apple Mach-O?
просто нашел еще одно предупреждение, которое может быть интересно, я надеюсь, что это приводит меня к решению:
Ignoring file ~/Library/Developer/Xcode/DerivedData/SomeApp/Build/Products/Debug-iphoneos/libPods.a,
file was built for archive which is not the architecture being linked(arm64):~/Library/Developer/Xcode/DerivedData/someApp/Build/Products/Debug-iphoneos/libPods.a
30 ответов:
Если архитектура и Действительный Архитектур все в порядке, вы можете проверить, добавили ли вы
$(inherited), который добавит флаги компоновщика, созданные в стручках, к Другие Флаги Компоновщика как ниже:
проблема в том, что cocoapods еще не были построены для архитектуры arm64, поэтому они не могут быть связаны при их создании. Вероятно, вы не можете использовать эти пакеты, пока они не будут обновлены и использовать эту архитектуру. Вы можете исправить ошибку компоновщика, перейдя в project - > target (имя вашего проекта) -> build settings и измените архитектуры на стандартные архитектуры (armv7, armv7s) и допустимые архитектуры на armv7, armv7s.
обратите внимание, что это означает, что вы не получите полный мощность 64-битного процессора. Вы сказали, что строите для 5s, поэтому может быть какая-то причина, по которой вам это нужно. Если вам по какой-то причине абсолютно нужна эта сила (возможно, вы создаете игру), и отчаянно нужны эти файлы, вы можете отправить запрос на вытягивание, а затем перекомпилировать проект в arm64, установив те же поля в arm64 в файлах, которые вы вытащили из проектов с открытым исходным кодом. Но, если вам действительно не нужно, чтобы эти файлы были совместимы с 64 битами, это кажется немного излишним пока.
EDIT: некоторые люди также сообщили, что установка Build для активных архитектур в YES также была необходима для решения этой проблемы.
по состоянию на 2014-04-28 настройки должны выглядеть примерно так:
я столкнулся с той же / аналогичной проблемой реализации
AVPictureInPictureControllerи проблема была в том, что я не связывал AVKit рамки в моем проекте.сообщение об ошибке было:
Undefined symbols for architecture armv7: "_OBJC_CLASS_$_AVPictureInPictureController", referenced from: objc-class-ref in yourTarget.a(yourObject.o) ld: symbol(s) not found for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation)Решение:
- иди к своему проект
- выберите цель
- перейдите к Собрать Фаз
- открыть Ссылка Двоичная С Библиотеки
- и, наконец, просто добавить + the AVKitрамки / другие рамки.
надеюсь, это поможет кому-то еще столкнуться с подобной проблемой, которую я имел.
Set архитектура до ARMv7 сarmv7s,Построение Архитектуры Active Только до нет, для каждой цели в проекте, включая один на РМО
некоторые объяснения, почему build_active_architecture имеет значение нет. Теперь Xcode определяет, какие устройства вы подключили, и соответствующим образом настроит активную архитектуру. Поэтому, если вы подключаете iPod Touch 2-го поколения к компьютеру, Xcode должен установить активную архитектуру на armv6. Построение Вашей цели с помощью приведенной выше конфигурации отладки теперь будет создавать только двоичный файл armv6 для экономии времени (если у вас нет огромного проекта, вы можете не заметить разницу, но я думаю, что секунды складываются время.)
при создании конфигурации дистрибутива для публикации в App Store необходимо убедиться, что этот параметр не задан для построения универсального двоичного файла fat http://useyourloaf.com/blog/2010/04/21/xcode-build-active-architecture-only.html
Я решил это, установив допустимые арки в armv7 armv7s и установив активные архитектуры сборки только в YES в выпуске, а затем выполнив новую "установку pod" из командной строки
учитывая iPhone 5s и еще не получив 64-битную версию сторонней библиотеки, мне пришлось вернуться в 32-битный режим с последним Xcode (до 5.1 он не жаловался).
я исправил это, удалив arm64 из списка допустимых архитектур, а затем установив Build Active Architecture только в NO. Мне кажется, что это имеет больше смысла, чем наоборот, как показано выше. Я публикую в случае, если другие люди не смогли получить ни одно из вышеперечисленных решений для работы их.
У меня была такая же проблема после обновления в Xcode 5.1 и исправил это путем установки архитектура до armv7 armv7s
застрял на этом вопросе весь день.
У меня было несколько схем, он компилировался отлично для демо, внутреннего, выпуска - однако схема отладки просто не компилировалась и жаловалась на libPods.пропажа.
решение состояло в том, чтобы перейти к Project -> Target -> Build Settings и изменить "Build Active Architecture Only" на YES. Чистить и строить! Наконец-то часы зуда в голове решены!
Это может быть связано с
libz.dylibилиlibz.tbd, просто нужно добавить его в свои цели для связывания двоичных файлов и попытаться снова скомпилировать.
Это сработало для меня:
SDK для iOS 9.3
в настройки сборки приложения.xcodeproj действительный архитектуры: архитектуры ARMv7 armv7s Построить активную архитектуру: нет
чистый и построить, работал на меня.
вам нужно просто удалить arm64 С Действующий Архитектуры и set нет до Только Активная Архитектура . Теперь просто очистить, построить и запустить. Вы не увидите эту ошибку.
:) КП
следующее работало для меня, чтобы получить компиляцию GPUImage без ошибок на Xcode 5.1 как для 64-битного симулятора, так и для retina iPad Mini,без необходимо удалить arm64 из списка допустимых архитектур (что противоречит цели владения 64-разрядным устройством для тестирования 64-разрядной производительности).
скачать .zip-папка со страницы GitHub:https://github.com/BradLarson/GPUImage
распакуйте и перейдите в папку "framework". Отсюда добавьте и скопируйте папку "источник" в свой проект Xcode. Убедитесь, что установлен флажок "копировать элементы в папку целевой группы", а также "создавать группы для любых добавленных папок". Это скопирует общие, iOS и Mac заголовочные файлы / файлы реализации в ваш проект.
Если вам не нужны файлы Mac, потому что вы компилируете для iOS, вы можете удалить папку Mac либо перед копированием файлов в свой проект, либо просто удалить группу изнутри Xcode.
после того, как вы добавили исходную папку в свой проект, просто используйте следующее, чтобы начать использовать классы/методы GPUImage:
#import "Source/GPUImage.h"несколько вещей, чтобы отметить:
- если вы получаете сообщение об ошибке "какао" не найдено, вы добавили папку/заголовки Mac в свой проект iOS-просто удалите группу/файлы Mac из своего проекта, и предупреждение исчезнет
- если вы переименуете исходную папку (а не группу в Xcode), используйте это имя вместо " Source / GPUImage.h " в инструкции #import. Поэтому, если вы переименуете папку в GPUImageFiles перед добавлением в свой проект, используйте: #import " GPUImageFiles / GPUImage.h
- очевидно, убедитесь, что arm64 выбран в списке допустимых архитектур, чтобы воспользоваться 64-разрядным процессором A7!
- это не GPUImage.пакет фреймворка (например, если вы загрузили фреймворк из http://www.raywenderlich.com/60968/ios-7-blur-effects-gpuimage) Итак возможно, это не правильный способ использования GPUImage, который предназначался Брэду Ларсону, но он работает для моего текущего проекта SpriteKit.
- нет необходимости ссылаться на фреймворки / библиотеки и т. д.-Просто импортируйте заголовок и исходную папку реализации, как описано выше
надеюсь, что это поможет-кажется, нигде не было четких инструкций, несмотря на то, что вопрос задавался несколько раз, но не бойтесь, GPUImage определенно работает для архитектуры arm64!
эта проблема возникла у меня после установки стручка через Podfile и
pod install. После того, как я попробовал кучу разных исправлений, я, наконец, просто импортировал стручок вручную (перетаскивая необходимые файлы в свой проект), и это решило проблему.
Как morisunshine ответ указал в правильном направлении, небольшая настройка в его ответе решила мою проблему для iOS8 .2.Благодаря ему.
Я решил эту проблему установив, что:
ARCHS = armv7 VALID_ARCHS = armv6 armv7 armv7s arm64 BUILD ACTIVE ARCHITECTURE ONLY= NO
для меня я использую opencv 2.4.9 в xcode 7.2 для iOS, и ошибки выше произошли, и я решаю ошибки с помощью opencv через pod install, а не в автономном режиме OpenCV framework.
вы можете попробовать, добавив текст OpenCV pod ниже и удалить автономную платформу opencv, если вы использовали.
pod 'OpenCV','2.4.9'
ни одно из решений не исправить эту ошибку в моем случае (Xcode 9), с
TesseractOCRiOS. После нескольких часов проб и ошибок, я придумал хорошее решение. Я просто удаляю'pod 'TesseractOCRiOS', '~> 4.0.0'наPodfile, используяpod install. А потом, добавитьpod 'TesseractOCRiOS', '~> 4.0.0'наPodfileи работатьpod installеще раз.Ура! Это работает!
в некоторых случаях, если вы определяете один интерфейс .H файл, но не реализовал все эти интерфейсы, эта ошибка произошла.
компоновщик не может найти реализацию.m файл, так что вам нужно реализовать его в вашем .m файл для каждого интерфейса.
чтобы устранить эту ошибку:
1.в .M файл, поставьте реализацию для каждого интерфейса. 2.перестроить
я столкнулся с той же проблемой после установки AWS framework чтобы преодолеть эту проблему,я обновил файл конфигурации POD из вашего проекта, который создается после установки AWS POD. Проверьте файл конфигурации, как показано ниже
OTHER_LDFLAGS = $(inherited) -ObjC -l"Pods-AWSAutoScaling" -l" Pods- AWSCloudWatch" -l"Pods-AWSCognito" -l"Pods-AWSCore" -l "Pods-AWSDynamoDB" -l"Pods-AWSEC2" -l"Pods-AWSElasticLoadBalancing" -l"Pods-AWSKinesis" -l"Pods-AWSLambda" -l"Pods-AWSMachineLearning" -l"Pods-AWSS3" -l"Pods-AWSSES" -l"Pods-AWSSNS" -l" Pods-AWSSQS"-l "Pods-AWSSimpleDB" -l"Pods-Bolts" -l"Pods-FMDB" -l"Pods-GZIP" -l"Pods-Mantle" -l"Pods-Reachability" -l"Pods-TMCache" -l"Pods-UICKeyChainStore" -l"Pods-XMLDictionary" -l"sqlite3" -l "z"-framework "Accelerate" -framework "AssetsLibrary" -framework "CoreLocation" -framework "Foundation" -framework "ImageIO" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "UIKit" OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS)если ваш конфигурационный файл не работает должным образом, то установите другие флаги компоновщика долларов США(по наследству)
- перейти к целевым настройкам сборки.
- установить только активную архитектуру сборки = нет для отладки и выпуска
- построить и запустить
Если архитектура и настройки компоновщика выглядят хорошо, проверьте свои файлы h. Моя проблема была той же ошибкой, но я реструктурировал файлы h, И я удалил оператор extern. Другие файлы m использовали эту переменную, вызывая ошибку компоновщика.
Я знаю, что это старая ветка. Однако та же проблема начала происходить со мной после перехода на последнюю версию CocoaPods (1.0.0) и попытки переустановить все стручки. Я столкнулся с ошибкой компоновщика "отсутствующие символы для armv64". Как ни странно, я решил ее следующим образом:
удалить все стручки (pod init, стручок установить)
перепишите подфайл в обратном порядке (вместо: pod " Mixpanel", стручок " домофон", Я используемый: стручок " домофон", pod " Mixpanel" )
Pod install
изменение порядка зависимостей в подфайле и перестройка модулей решили проблему.





Comments