Я получаю Apple Mach-O Linker Error каждый раз, когда импортирую файл из 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
Ответы:
Если с вашими архитектурами и действительными архитектурами все в порядке, вы можете проверить, добавили ли вы
$(inherited)
, что добавит флаги компоновщика, созданные в модулях, в другие флаги компоновщика, как показано ниже:источник
Use the $(inherited) flag
предупреждение терминала. И ошибка привела меня сюда. спас мой деньПроблема заключается в том, что cocoapods не были созданы для архитектуры arm64, поэтому они не могут быть связаны при сборке. Вероятно, вы не сможете использовать эти пакеты, пока они не будут обновлены и не будут использовать эту архитектуру. Вы можете исправить ошибку компоновщика, перейдя в проект -> цель (имя вашего проекта) -> построить настройки и изменить архитектуру на стандартную (armv7, armv7s) и действительные архитектуры на armv7, armv7s.
Обратите внимание, что это означает, что вы не получите полную мощность 64-битного процессора. Вы сказали, что строите для 5-х, так что может быть какая-то причина, по которой вам это нужно. Если вам по какой-то причине совершенно необходимы эти возможности (возможно, вы создаете игру), и вам крайне необходимы эти файлы, вы можете отправить запрос на извлечение, а затем перекомпилировать проект в arm64, установив те же поля в arm64 в файлах, которые вы извлекли из проекты с открытым исходным кодом. Но, если вам действительно не нужно, чтобы эти файлы были совместимы с 64 битами, на данный момент это выглядит немного излишним.
РЕДАКТИРОВАТЬ: Некоторые люди также сообщили, что установка Build For Active Architecture для YES также была необходима для решения этой проблемы.
По состоянию на 2014-04-28 настройки должны выглядеть примерно так:
источник
file
команду в терминале, чтобы сказать, какие архитектуры поддерживает статическая библиотека.Я решил эту проблему, установив, что:
ARCHS = armv7 armv7s
VALID_ARCHS = armv6 armv7 armv7s arm64
источник
Я столкнулся с той же / аналогичной проблемой реализации,
AVPictureInPictureController
и проблема заключалась в том, что я не связывал инфраструктуру AVKit в своем проекте.Сообщение об ошибке было:
Решение:
Надеюсь, это поможет кому-то еще столкнуться с аналогичной проблемой, с которой я столкнулся.
источник
Я также столкнулся с той же проблемой, вышеописанные методы не будут работать. Я случайно удалил файлы в следующем каталоге на нем.
Расположение папки:
~ / Library / Developer / Xcode / DerivedData /
источник
Установите Архитектуры на armv7 armv7s , построить Активную Архитектуру только к NO , для каждой цели в проекте, в том числе каждого в Стручках
источник
Я исправил мой, проверив выбранные файлы реализации в целевом членстве справа. Это особенно полезно при работе с расширениями, то есть с пользовательскими клавиатурами.
источник
Вот несколько объяснений, почему
build_active_architecture
установлено значение NO. Xcode теперь определяет, какие устройства вы подключили, и соответственно устанавливает активную архитектуру. Поэтому, если вы подключите iPod Touch второго поколения к своему компьютеру, Xcode должен установить для активной архитектуры значение armv6. Построение вашей цели с помощью описанной выше конфигурации Debug теперь будет создавать только двоичный файл armv6 для экономии времени (если у вас нет большого проекта, вы можете не заметить разницу, но я полагаю, что секунды складываются со временем).Когда вы создаете конфигурацию распространения для публикации в App Store, вы должны убедиться, что этот параметр не установлен, так что Xcode вместо этого создаст толстый универсальный двоичный файл http://useyourloaf.com/blog/2010/04/21/xcode -Build-активной архитектурно-only.html
источник
Вам нужно просто удалить arm64 из Valid Architecture и установить NO в Active Architecture Only . Теперь просто очистить, построить и запустить. Вы не увидите эту ошибку снова.
:) КП
источник
Решено после удаления содержимого DerivedData -> Build -> Products -> Debug-iphoneos
источник
Это может быть связано с
libz.dylib
илиlibz.tbd
, просто нужно добавить его к вашим целям для двоичных файлов и попытаться снова скомпилировать.источник
Я решил эту проблему, установив действительные archs в armv7 armv7s и установив активные сборки только в YES в релизе, а затем выполнив новую «установку pod» из командной строки
источник
Учитывая iPhone 5s и еще не получив 64-битную версию сторонней библиотеки, мне пришлось вернуться в 32-битный режим с последним Xcode (до 5.1 он не жаловался).
Я исправил это, удалив arm64 из списка Valid Architectures, а затем установив Build Active Architecture Only на NO. Мне кажется, это имеет больше смысла, чем наоборот, как показано выше. Я пишу на тот случай, если другие люди не смогут заставить ни одно из перечисленных выше решений работать на них.
источник
У меня была такая же проблема после обновления до Xcode 5.1 и исправления, установив для Architectures значение armv7 armv7s
источник
Застрял в этом вопросе весь день.
У меня было несколько Schemes, он прекрасно компилировался для Demo, Internal, Release - однако схема Debug просто не компилировалась и жаловалась на отсутствие libPods.a.
Решением было перейти в Project -> Target -> Build Settings и изменить «Build Active Architecture Only» на YES. Очистить и построить! Наконец часы зуда головы решены!
источник
Установка
-ObjC
дляOther Linker Flags
телосложения Настроек цели решить эту проблему.источник
Это сработало для меня:
IOS SDK 9,3
в настройку сборки допустимой архитектуры app.xcodeproj: armv7 armv7s Сборка активной архитектуры: нет
Очистить и построить, работал для меня.
источник
Следующее сработало для меня, чтобы компилировать GPUImage без ошибок на Xcode 5.1 как для 64-битного симулятора, так и для Retina iPad Mini, без необходимости удалять arm64 из списка Valid Architectures (что противоречит цели владения 64-битным устройством для тестирования 64-битная производительность).
Загрузите папку .zip со страницы GitHub: https://github.com/BradLarson/GPUImage
Разархивируйте и перейдите в папку «framework». Отсюда добавьте и скопируйте папку «Source» в ваш проект Xcode. Убедитесь, что установлен флажок «Копировать элементы в папку целевой группы», а также установлен флажок «Создать группы для любых добавленных папок». Это скопирует общие файлы заголовка / реализации для iOS и Mac в ваш проект.
Если вам не нужны файлы Mac, потому что вы компилируете для iOS, вы можете удалить папку Mac либо перед тем, как скопировать файлы в свой проект, либо просто удалить группу из Xcode.
После того, как вы добавили папку Source в ваш проект, просто используйте следующее, чтобы начать использовать классы / методы GPUImage:
Несколько вещей, на которые следует обратить внимание:
Надеюсь, что вышесказанное поможет - похоже, нигде не было четких инструкций, несмотря на то, что вопрос задавался несколько раз, но не бойтесь, GPUImage определенно работает для архитектуры arm64!
источник
Эта проблема возникла для меня после установки модуля через Podfile и
pod install
. Попробовав кучу разных исправлений, я, наконец, просто импортировал Pod вручную (перетащив необходимые файлы в мой проект), и это решило проблему.источник
Поскольку ответ morisunshine указывал в правильном направлении, небольшая настройка его ответа решила мою проблему для iOS8.2. Спасибо ему.
Я решил эту проблему, установив, что:
источник
источник
В моем случае мне пришлось искать
C++ Standard Library
и убедитесь, чтоlibc++
был выбран именно тот.источник
Для меня я использую opencv 2.4.9 в xcode 7.2 для iOS, и вышеупомянутые ошибки произошли, и я решаю ошибки с помощью установки opencv через pod, а не автономной среды opencv.
Вы можете попробовать, добавив текст OpenCV pod ниже и удалить автономную среду OpenCV, если вы использовали.
под 'OpenCV', '2.4.9'
источник
Ни одно из решений не исправляет эту ошибку в моем случае (Xcode 9), с
TesseractOCRiOS
. После нескольких часов проб и ошибок я нашел хорошее решение. Я просто удаляю'pod 'TesseractOCRiOS', '~> 4.0.0'
вPodfile
, запуститьpod install
. А затем добавьтеpod 'TesseractOCRiOS', '~> 4.0.0'
обратноPodfile
иpod install
снова запустите .Взрыв! Оно работает!
источник
Msgstr "Цель OPN [Debug] переопределяет настройку сборки OTHER_LDFLAGS". Это было главной проблемой. После добавления $ (унаследованного) в новую строку в другие флаги компоновщика я решил проблему.
источник
в некоторых случаях, если вы определили еще один интерфейс в файле .h, но не реализовали все эти интерфейсы, произошла эта ошибка.
Компоновщик не может найти реализацию в файле .m, поэтому вам нужно внедрить его в свой файл .m для каждого интерфейса.
Чтобы устранить эту ошибку:
1.in .m файл, предоставьте реализацию для каждого интерфейса. 2.rebuild
источник
Я столкнулся с той же проблемой. Мое решение я нашел здесь: почему компоновщик связывает статические библиотеки с ошибками? IOS
Добавление $ (TOOLCHAIN_DIR) / usr / lib / swift / $ (PLATFORM_NAME) к путям поиска в библиотеке решило проблему.
источник
У меня возникла та же проблема после установки платформы AWS, чтобы устранить эту проблему, я обновил файл конфигурации POD из вашего проекта, который создается после установки AWS POD. Проверьте конфигурационный файл, как показано ниже
если ваш конфигурационный файл не работает должным образом, установите для флага Other Linker значение $ (наследуется)
источник
Если архитектура и настройки компоновщика выглядят хорошо, проверьте ваши h-файлы. В моей проблеме была та же ошибка, но я реструктурировал h-файлы и удалил оператор extern. Другие m файлы использовали эту переменную, вызывая ошибку компоновщика.
источник
Добавление «Security.framework» помогло мне.
источник