Undefined символы для архитектуры arm64

Я получаю ошибку Apple Mach-O Linker каждый раз, когда я импортирую файл из CocoaPods.

Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_FBSession", referenced from: someFile
ld: symbol(s) not found for architecture arm64

Я получаю около 12 из них, для различных Pods, которые я использую.

Я пытаюсь построить для iPhone 5S с помощью XCode 5.

Я пробовал различные решения здесь, но не получил ни одного из них для работы.

Как исправить ошибку Apple Mach-O Linker?


Просто найдено другое предупреждение, которое может быть интересно, я надеюсь, что это приведет меня к решению:

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

Ответ 1

Если у вас Архитектуры и Допустимые архитектуры, вы можете проверить, добавили ли вы $(inherited), который добавит флаги компоновщика, сгенерированные в контейнерах, в Другие флаги компоновщика, как показано ниже: enter image description here

Ответ 2

Проблема в том, что кокоаподы не были созданы для архитектуры arm64, но при их создании они не могут быть связаны. Вероятно, вы не сможете использовать эти пакеты до тех пор, пока они не будут обновлены и не будут использовать эту архитектуру. Вы можете исправить ошибку компоновщика, перейдя в проект → target (название вашего проекта) → установить настройки и изменить архитектуры на стандартные архитектуры (armv7, armv7s) и допустимые архитектуры в armv7, armv7s.

Обратите внимание, что это означает, что вы не получите полную мощность 64-битного процессора. Вы сказали, что строите на 5 секунд, так что может быть по какой-то причине вам это нужно. Если вам почему-то нужна эта мощь (возможно, вы строите игру) и отчаянно нуждаетесь в этих файлах, вы можете отправить запрос на вытягивание, а затем перекомпилировать проект в arm64, установив те же самые поля в arm64 в файлы, которые вы вытащили из проекты с открытым исходным кодом. Но, если вы действительно не нуждаетесь в том, чтобы эти файлы были совместимы с 64-битной версией, на данный момент это кажется немного перегруженным.

EDIT: некоторые люди также сообщили, что для решения этой проблемы также необходимо установить параметр "Build For Active Architectures" на "YES".

Начиная с 2014-04-28 настройка должна выглядеть примерно так:

enter image description here

Ответ 3

Я решил эту проблему, установив, что:

ARCHS = armv7 armv7s

VALID_ARCHS = armv6 armv7 armv7s arm64

Ответ 4

Я столкнулся с тем же/аналогичным выпуском 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)

Решение:

  • Перейдите в свой Проект
  • Выберите Цель
  • Затем перейдите к Фазы сборки
  • Открыть Связывание двоичных файлов с библиотеками
  • Наконец, просто добавьте + структуру AVKit /любую другую структуру.

Надеюсь, это поможет кому-то другому столкнуться с подобной проблемой, которую я имел.

Ответ 5

Я также столкнулся с той же проблемой, вышеупомянутые методы не будут работать. Я случайно удалил файлы в следующем каталоге на нем.

Расположение папки:

~/Library/Developer/Xcode/DerivedData/

enter image description here

Ответ 6

Установите Архитектуры на armv7 armv7s, Только встроенная активная архитектура НЕТ, для каждой цели в проекте, включая каждый в Pods

Ответ 7

Я исправил мой, проверив выбранные файлы реализации в целевом членстве с правой стороны. Это особенно полезно при работе с расширениями, то есть с пользовательскими клавиатурами.

Целевое членство

Ответ 8

некоторое объяснение, почему build_active_architecture имеет значение NO. Теперь Xcode обнаруживает, какие устройства вы подключили, и соответственно настроит активную архитектуру. Поэтому, если вы подключите iPod Touch второго поколения к компьютеру, Xcode должен установить активную архитектуру в armv6. Построение вашей цели с помощью вышеприведенной конфигурации отладки теперь будет только строить двоичный файл armv6, чтобы сэкономить время (если у вас нет большого проекта, вы можете не заметить разницу, но я думаю, что секунды складываются со временем).

Когда вы создаете конфигурацию распространения для публикации в App Store, вы должны убедиться, что этот параметр не установлен так, что вы создаете жирный универсальный двоичный файл http://useyourloaf.com/blog/2010/04/21/xcode-build-active-architecture-only.html

Ответ 9

Решено после удаления содержимого DerivedData → Build → Products → Debug-iphoneos

Ответ 10

Это может быть связано с libz.dylib или libz.tbd, просто добавьте его в свои цели для связывания двоичных файлов и попробуйте снова скомпилировать.

Ответ 11

Вам нужно просто удалить arm64 из Действительной архитектуры и установить НЕТ на Только активная архитектура. Теперь просто очистите, создайте и запустите. Вы не увидите эту ошибку еще раз.

:) KP

Ответ 12

Я решил это, установив действительные арки в armv7 armv7s и установив строчные активные архитектуры только в YES в релизе, а затем выполнив новую "установку pod" из командной строки

Ответ 13

Учитывая iPhone 5s и еще не получив 64-битную версию сторонней библиотеки, мне пришлось вернуться к 32-битовому режиму с последним Xcode (до 5.1 он не жаловался).

Я исправил это, удалив arm64 из списка Valid Architectures, а затем установив Build Active Architecture только на NO. Мне кажется, что это имеет больше смысла, чем наоборот, как показано выше. Я отправляю сообщения в случае, если другие люди не смогут получить из них какие-либо из вышеперечисленных решений.

Ответ 14

У меня была такая же проблема после обновления до Xcode 5.1 и исправлена ​​ее, установив Архитектуры на armv7 armv7s

Ответ 15

Застрял в этом вопросе весь день.

У меня было несколько схем, оно отлично компилировалось для Demo, Internal, Release - однако схема отладки просто не компилировалась и жаловалась на отсутствие libPods.a.

Решение заключалось в том, чтобы перейти к Project → Target → Build Settings и изменить "Build Active Architecture Only" на YES. Очистите и постройте! Наконец, частые зуд головы решается!

Ответ 16

Настройка -ObjC - Other Linker Flags в настройках сборки цели решила проблему.

Ответ 17

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

ios sdk 9.3

в настройку сборки app.xcodeproj действительная архитектура: armv7 armv7s Build Active architecture: Нет

Очистите и постройте, сработали для меня.

Ответ 18

Следующее сработало для меня, чтобы получить компиляцию GPUImage без ошибок в Xcode 5.1 для 64-битного симулятора и сетчатки iPad Mini, без необходимости удаления arm64 из списка Valid Architectures (что лишает цель владеть 64-битным устройство для тестирования 64-разрядной производительности).

Загрузите папку .zip с страницы GitHub: https://github.com/BradLarson/GPUImage

Разархивируйте и перейдите в папку "framework". Отсюда добавьте и скопируйте папку "Источник" в проект Xcode. Убедитесь, что "Скопировать элементы в папку целевой группы" отмечен галочкой, а также "Создать группы для любых добавленных папок". Это скопирует общие файлы, iOS и заголовки/файлы Mac в ваш проект.

Если вам не нужны файлы Mac, потому что вы компилируете iOS, вы можете удалить папку Mac либо перед копированием файлов в проект, либо просто удалить группу из Xcode.

После того, как вы добавили исходную папку в свой проект, просто используйте следующее, чтобы начать использовать классы/методы GPUImage:

#import "Source/GPUImage.h" 

Несколько замечаний:

  • Если вы получили сообщение об ошибке "Cocoa", вы добавили папку Mac/заголовки в проект iOS - просто удалите группу Mac/файлы из вашего проекта, и предупреждение исчезнет.
  • Если вы переименовали исходную папку (а не группу в Xcode), используйте это имя вместо "Source/GPUImage.h" в инструкции #import. Поэтому, если вы переименуете папку в GPUImageFiles перед добавлением в свой проект, используйте: #import "GPUImageFiles/GPUImage.h
  • Очевидно, что arm64 выбран в списке Valid Architectures, чтобы воспользоваться 64-разрядным процессором A7!
  • Это не пакет GPUImage.framework(например, если вы загрузили фреймворк из http://www.raywenderlich.com/60968/ios-7-blur-effects-gpuimage), так что это может быть неверно способ использования GPUImage, который предназначил Брэд Ларсон, но он работает для моего текущего проекта SpriteKit.
  • Не нужно ссылаться на фреймворки/библиотеки и т.д. - просто импортируйте исходную папку заголовка и реализации, как описано выше.

Надеюсь, что это поможет - кажется, что никаких четких инструкций не было, несмотря на то, что вопрос задавался несколько раз, но не бойтесь, GPUImage определенно работает для архитектуры arm64!

Ответ 19

Эта проблема возникла для меня после установки модуля под Podfile и pod install. Попробовав кучу разных исправлений, я, наконец, просто импортировал Pod вручную (перетащив необходимые файлы в мой проект), и это решило проблему.

Ответ 20

Как morisunshine ответ указал в правильном направлении, небольшая настройка в его ответе решила мою проблему для iOS8.2. Спасибо ему.

Я решил эту проблему, установив, что:

ARCHS = armv7

VALID_ARCHS = armv6 armv7 armv7s arm64

BUILD ACTIVE ARCHITECTURE ONLY= NO

Ответ 21

В моем случае мне пришлось искать

C++ Standard Library и убедитесь, что выбрана libc++.

Ответ 22

Для меня я использую opencv 2.4.9 в xcode 7.2 для iOS, и произошли ошибки выше, и я решаю ошибки, используя opencv через pod install, а не автономную opencv framework.

Вы можете попробовать, добавив текст opencv pod ниже и удалите автономную структуру opencv, если вы использовали.

pod 'OpenCV', '2.4.9'

Ответ 23

Ни одно из решений не исправляет эту ошибку в моем случае (Xcode 9), TesseractOCRiOS. После нескольких часов проб и ошибок я придумал хорошее решение. Я просто удаляю 'pod 'TesseractOCRiOS', '~> 4.0.0' в Podfile, запустите pod install. Затем добавьте pod 'TesseractOCRiOS', '~> 4.0.0' назад к Podfile и запустите pod install снова.

Взрыв! Оно работает!

Ответ 24

в некоторых случаях, если вы определили еще один интерфейс в файле .h, но не реализовали все эти интерфейсы, произошла эта ошибка.

Компоновщик не может найти реализацию в файле .m, поэтому вам нужно реализовать его в своем файле .m для каждого интерфейса.

Чтобы устранить эту ошибку:

1.in.m файл, предоставьте реализацию для каждого интерфейса. 2.rebuild

Ответ 25

У меня возникла такая же проблема после установки рамки AWS для решения этой проблемы. У меня есть обновленный файл конфигурации 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)   

если ваш файл конфигурации не работает должным образом. Установите Другой флаг Linker на $(унаследованный)

Ответ 26

  • Переход к целевым настройкам сборки.
  • установить только СТРУКТУРА АКТИВНОЙ АРХИТЕКТУРЫ = НЕТ для отладки и выпуска
  • Сборка и запуск

Ответ 27

Если настройки архитектуры и компоновщика выглядят хорошо, проверьте свои h файлы. Моя проблема была той же ошибкой, но я перестроил h файлы, и я удалил оператор extern. Другие файлы m использовали эту переменную, вызывая ошибку компоновщика.

Ответ 28

Добавление "Security.framework" сделало трюк для меня.

Ответ 29

Я знаю, что это старая ветка. Тем не менее, эта же проблема началась со мной после перехода на последнюю версию CocoaPods (1.0.0) и попытку переустановки всех контейнеров. Я столкнулся с ошибкой компоновщика "Отсутствующие символы для armv64". Как ни странно, я решил это, выполнив следующие шаги:

  • Удалите все контейнеры (pod init, pod install)

  • Перепишите podfile в обратном порядке (вместо: pod "Mixpanel", под "Интерком", Я использовал: под "Интерком", pod "Mixpanel" )

  • Pod install

Реверсирование порядка зависимостей в подкоде и перестройка модулей решила проблему.

Ответ 30

Msgstr "Цель OPN [Debug] переопределяет настройку сборки OTHER_LDFLAGS". Это было главной проблемой. После добавления $ (унаследованного) в новую строку в другие флаги компоновщика решена моя проблема. enter image description here