Неопределенные символы для архитектуры 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

1137   30  

30 ответов:

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

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

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

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

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

enter image description here

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

ARCHS = armv7 armv7s

VALID_ARCHS = armv6 armv7 armv7s arm64

я столкнулся с той же / аналогичной проблемой реализации 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)

Решение:

  1. иди к своему проект
  2. выберите цель
  3. перейдите к Собрать Фаз
  4. открыть Ссылка Двоичная С Библиотеки
  5. и, наконец, просто добавить + the AVKitрамки / другие рамки.

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

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

установка папке:

~ / Библиотека / Разработчик / Xcode / DerivedData/

enter image description here

Set архитектура до ARMv7 сarmv7s,Построение Архитектуры Active Только до нет, для каждой цели в проекте, включая один на РМО

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

Target Membership

некоторые объяснения, почему 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

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

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

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

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

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

в моем случае, я должен был искать

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

для меня я использую 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)   

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

  1. перейти к целевым настройкам сборки.
  2. установить только активную архитектуру сборки = нет для отладки и выпуска
  3. построить и запустить

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

Добавления "Безопасности.рамки" сделал трюк для меня.

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

  1. удалить все стручки (pod init, стручок установить)

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

  3. Pod install

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

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

Comments

    Ничего не найдено.