it-swarm.com.ru

Неопределенные символы для архитектуры 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 штук для различных стручков, которые я использую.

Я пытаюсь собрать для iPhone 5S с использованием XCode 5.

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

Как я могу исправить эту ошибку 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

175
GangstaGraham

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

225
chancyWu

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

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

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

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

enter image description here

120
AdamG

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

ARCHS = armv7 armv7s

VALID_ARCHS = armv6 armv7 armv7s arm64

52
morisunshine

Я столкнулся с той же/подобной проблемой, реализующей AVPictureInPictureController, и проблема заключалась в том, что я не связывал AVKit framework в моем проекте.

Сообщение об ошибке было:

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)

Решение:

  1. Перейти на ваш Проект
  2. Выберите вашу цель  
  3. Затем перейдите к Фазы сборки
  4. Открыть Двоичные ссылки на библиотеки
  5. Наконец, просто добавьте + AVKit framework / любой другой framework .

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

35
NorthBlast

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

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

~/Library/Developer/Xcode/DerivedData /

 enter image description here

29
ylgwhyh

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

24
BabyPanda

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

 Target Membership

16
jaytrixz

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

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

11
Moaz Saeed

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

5
Tamir Avrahamov

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

:) КП

4
Kalpesh Panchasara

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

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

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

3
GameDev

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

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

3
user938797

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

3
TonyTony

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

3
Fabio Russo

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

3
deko

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

iOS SDK 9,3 

в настройках сборки app.xcodeproj действительная архитектура: armv7 armv7sBuild Активная архитектура: нет

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

2
Shashank Saxena

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

2
Thomas G.

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

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

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

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

1
Michael Yang

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

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

ARCHS = armv7

VALID_ARCHS = armv6 armv7 armv7s arm64

BUILD ACTIVE ARCHITECTURE ONLY= NO
1
SandeepAggarwal

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

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

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

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

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

#import "Source/GPUImage.h" 

Несколько вещей, на которые стоит обратить внимание:

  • Если вы получаете сообщение о том, что «Какао» не найдено, вы добавили папку/заголовки Mac в свой проект iOS - просто удалите группу/файлы Mac из вашего проекта, и предупреждение исчезнет.
  • Если вы переименуете папку Source (не группу в 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!

1
inaccessiblerail

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

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

1
CoachNono

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

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

1
0xa6a

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

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

под 'OpenCV', '2.4.9'

1
Chuyang

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

1
Will Dennis

У меня возникла та же проблема после установки платформы 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)   

если ваш конфигурационный файл не работает должным образом, тогда установите свой флаг Другой компоновщик в $ (наследуется) 

0
Swapnil1156035

Моя проблема заключалась в том, что в моем проекте уже было несколько SDK Facebook (FBSDKLoginKit и FBSDKCoreKit).

Мне понадобился только еще один SDK (FBSDKShareKit) и я его импортировал, что дало «Неопределенную архитектуру символов для arm64».

Поскольку FBSDKShareKit зависит от обновленной версии FBSDKCoreKit, при обновлении других платформ все снова работает.

0
Morten

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

0
Mohsen mokhtari
  1. Перейдите к целевым настройкам сборки.
  2. установите BUILD ACTIVE ARCHITECTURE ONLY = NO для отладки и выпуска
  3. Сборка и запуск
0
Zia

Добавление «Security.framework» помогло мне.

0
Eran Talmor

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

0
Nick

У меня была эта проблема с моим « зонтичным фреймворком », который когда я создавал фреймворк второго уровня. 

Я решил эту проблему, изменив схему сборки моего первого уровня для «Универсального устройства iOS». Я думаю, что это изменит _CodeSignature, в чем я почувствовал разницу, когда переместил всю свою «инфраструктуру зонтика» в GitHub.

0
Nijat2018

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

  1. Удалить все модули (pod init, Pod install)

  2. Перепишите подфайл в обратном порядке (вместо: Pod "Mixpanel", Pod "Intercom", Я использовал: Pod "Intercom", Pod "Mixpanel" )

  3. Под установкой

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

0
Arik Segal