Ответ 1
Если у вас Архитектуры и Допустимые архитектуры, вы можете проверить, добавили ли вы $(inherited)
, который добавит флаги компоновщика, сгенерированные в контейнерах, в Другие флаги компоновщика, как показано ниже:
Я получаю ошибку 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
Если у вас Архитектуры и Допустимые архитектуры, вы можете проверить, добавили ли вы $(inherited)
, который добавит флаги компоновщика, сгенерированные в контейнерах, в Другие флаги компоновщика, как показано ниже:
Проблема в том, что кокоаподы не были созданы для архитектуры arm64, но при их создании они не могут быть связаны. Вероятно, вы не сможете использовать эти пакеты до тех пор, пока они не будут обновлены и не будут использовать эту архитектуру. Вы можете исправить ошибку компоновщика, перейдя в проект → target (название вашего проекта) → установить настройки и изменить архитектуры на стандартные архитектуры (armv7, armv7s) и допустимые архитектуры в armv7, armv7s.
Обратите внимание, что это означает, что вы не получите полную мощность 64-битного процессора. Вы сказали, что строите на 5 секунд, так что может быть по какой-то причине вам это нужно. Если вам почему-то нужна эта мощь (возможно, вы строите игру) и отчаянно нуждаетесь в этих файлах, вы можете отправить запрос на вытягивание, а затем перекомпилировать проект в arm64, установив те же самые поля в arm64 в файлы, которые вы вытащили из проекты с открытым исходным кодом. Но, если вы действительно не нуждаетесь в том, чтобы эти файлы были совместимы с 64-битной версией, на данный момент это кажется немного перегруженным.
EDIT: некоторые люди также сообщили, что для решения этой проблемы также необходимо установить параметр "Build For Active Architectures" на "YES".
Начиная с 2014-04-28 настройка должна выглядеть примерно так:
Я решил эту проблему, установив, что:
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)
Решение:
Надеюсь, это поможет кому-то другому столкнуться с подобной проблемой, которую я имел.
Я также столкнулся с той же проблемой, вышеупомянутые методы не будут работать. Я случайно удалил файлы в следующем каталоге на нем.
Расположение папки:
~/Library/Developer/Xcode/DerivedData/
Установите Архитектуры на armv7 armv7s, Только встроенная активная архитектура НЕТ, для каждой цели в проекте, включая каждый в Pods
Я исправил мой, проверив выбранные файлы реализации в целевом членстве с правой стороны. Это особенно полезно при работе с расширениями, то есть с пользовательскими клавиатурами.
некоторое объяснение, почему 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
Решено после удаления содержимого DerivedData → Build → Products → Debug-iphoneos
Это может быть связано с libz.dylib
или libz.tbd
, просто добавьте его в свои цели для связывания двоичных файлов и попробуйте снова скомпилировать.
Вам нужно просто удалить arm64 из Действительной архитектуры и установить НЕТ на Только активная архитектура. Теперь просто очистите, создайте и запустите. Вы не увидите эту ошибку еще раз.
:) KP
Я решил это, установив действительные арки в armv7 armv7s и установив строчные активные архитектуры только в YES в релизе, а затем выполнив новую "установку pod" из командной строки
Учитывая iPhone 5s и еще не получив 64-битную версию сторонней библиотеки, мне пришлось вернуться к 32-битовому режиму с последним Xcode (до 5.1 он не жаловался).
Я исправил это, удалив arm64 из списка Valid Architectures, а затем установив Build Active Architecture только на NO. Мне кажется, что это имеет больше смысла, чем наоборот, как показано выше. Я отправляю сообщения в случае, если другие люди не смогут получить из них какие-либо из вышеперечисленных решений.
У меня была такая же проблема после обновления до Xcode 5.1 и исправлена ее, установив Архитектуры на armv7 armv7s
Застрял в этом вопросе весь день.
У меня было несколько схем, оно отлично компилировалось для Demo, Internal, Release - однако схема отладки просто не компилировалась и жаловалась на отсутствие libPods.a.
Решение заключалось в том, чтобы перейти к Project → Target → Build Settings и изменить "Build Active Architecture Only" на YES. Очистите и постройте! Наконец, частые зуд головы решается!
Настройка -ObjC
- Other Linker Flags
в настройках сборки цели решила проблему.
Это сработало для меня:
ios sdk 9.3
в настройку сборки app.xcodeproj действительная архитектура: armv7 armv7s Build Active architecture: Нет
Очистите и постройте, сработали для меня.
Следующее сработало для меня, чтобы получить компиляцию 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"
Несколько замечаний:
Надеюсь, что это поможет - кажется, что никаких четких инструкций не было, несмотря на то, что вопрос задавался несколько раз, но не бойтесь, GPUImage определенно работает для архитектуры arm64!
Эта проблема возникла для меня после установки модуля под Podfile и pod install
. Попробовав кучу разных исправлений, я, наконец, просто импортировал Pod вручную (перетащив необходимые файлы в мой проект), и это решило проблему.
Как 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.in.m файл, предоставьте реализацию для каждого интерфейса. 2.rebuild
У меня возникла такая же проблема после установки рамки 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 на $(унаследованный)
Если настройки архитектуры и компоновщика выглядят хорошо, проверьте свои h файлы. Моя проблема была той же ошибкой, но я перестроил h файлы, и я удалил оператор extern. Другие файлы m использовали эту переменную, вызывая ошибку компоновщика.
Добавление "Security.framework" сделало трюк для меня.
Я знаю, что это старая ветка. Тем не менее, эта же проблема началась со мной после перехода на последнюю версию CocoaPods (1.0.0) и попытку переустановки всех контейнеров. Я столкнулся с ошибкой компоновщика "Отсутствующие символы для armv64". Как ни странно, я решил это, выполнив следующие шаги:
Удалите все контейнеры (pod init, pod install)
Перепишите podfile в обратном порядке (вместо: pod "Mixpanel", под "Интерком", Я использовал: под "Интерком", pod "Mixpanel" )
Pod install
Реверсирование порядка зависимостей в подкоде и перестройка модулей решила проблему.
Msgstr "Цель OPN [Debug] переопределяет настройку сборки OTHER_LDFLAGS". Это было главной проблемой. После добавления $ (унаследованного) в новую строку в другие флаги компоновщика решена моя проблема.