библиотека не найдена для -lPods

334

Я получил ошибку при архивировании проекта. Это моя среда.

  • Mac OS Lion
  • Xcode 4.3.1
  • iOS SDK 5.1

Цель развертывания проекта:

IPHONEOS_DEPLOYMENT_TARGET 3.2

Ошибка показывает:

ld: library not found for -lPods
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Я предполагаю, что Pods - это CocoaPods, которые я использовал для управления зависимостями проекта XCode. https://github.com/CocoaPods/CocoaPods

Это мой подфайл

platform :ios  
dependency 'libPusher', '1.1'

Я не уверен, что означает ошибка?

angelokh
источник
Причина проблемы в том, что ни один из ответов не охвачен. проверить этот ответ здесь: stackoverflow.com/questions/24050012/...
Hasan

Ответы:

611

Открываете ли вы рабочую область (созданную CocoaPods) вместо xcodeproj?

сплав
источник
26
Я сделал. Проблема решается после изменения архитектуры релиза проекта Pods на armv6 armv7.
Ангелох
10
Ага, в вашей Podfile, указать платформу следующим образом: platform :ios, :deployment_target => "3.2". Это должно правильно настроить его при следующем запуске pod install.
сплав
248
Чтобы быть понятным новичкам, вы должны открывать .xcworkspaceфайл, а не .xcodeproj. Таким образом, в дополнение к вашему проекту, Xcode знает о проекте в Pods/каталоге и о том, как его собрать libPods.a.
Джонатан Тран
13
Исходя из комментария @ JonathanTran ... если у вас есть .xcodeprojоткрытое, вам нужно закрыть его, прежде чем открыть .xcworkspaceфайл.
Росс
4
Обратите внимание, что в проекте, с которым вы используете модули pods, также должна быть установлена ​​архитектура armv6 armv7 (если этот вариант используется в архитектуре проекта pods). Если вы этого не сделаете, вы получите ту же ошибку.
Патрик Бассут
173

Я разделил приложение и цели теста в Podfile, используя

target :App do
    
end

target :AppTests do
    
end

Это привело к появлению двух новых продуктов libPods-App.a и libPods-AppTests.a , соответственно, и они сделали предыдущий продукт libPods.a устаревшим. Мне пришлось удалить этот продукт из раздела « Связать двоичные файлы с библиотеками» конфигурации фаз сборки обеих целей.

Андрас Хатвани
источник
3
Да, это было для меня, после того, как я попробовал дюжину других вещей ранее в этой теме. Мой подфайл имеет две цели, как указано выше, и поэтому libPods.a не создавалась. Удаление libPods.a из раздела «Связать двоичные файлы с библиотеками» «исправило» это (хотя, конечно, теперь у меня есть 32 сообщения «Неопределенные символы» для сортировки из-за отсутствующей библиотеки SQLite и т. Д.
Hot Licks,
Это то же самое исправление, что и stackoverflow.com/a/21694261/581994 и несколько других.
Hot Licks
В настоящее время все еще возникает проблема
nsantorello
«Они сделали предыдущий продукт libPods.a устаревшим. Мне пришлось удалить ...»
Василий
Это было главным вопросом для меня. По какой-то причине у меня был бинарный файл из более старой тестовой цели.
ЖЖ Уилсон
119

Я столкнулся с подобной проблемой сегодня.

  1. Я настраиваю новый проект
  2. Я установил какао
  3. Я создал новую конфигурацию Previewвместе с существующими DebugиRelease
  4. Теперь при компиляции в этой новой Previewконфигурации компилятор не сможет связываться с Pods и выдает мне следующее сообщение:

    ld: library not found for -lPods

Решение:

Я должен был бежать

 pod install

снова и таким образом конфигурируем cocoapods для новой Previewконфигурации. Он обновил мой проект, рабочее пространство и файл проекта Pod, и проблема исчезла

Besi
источник
1
Это застало меня врасплох. Особенно, поскольку он продолжал работать еще долго после того, как я создал конфигурации, и только когда я очистил свои производные данные, возникла проблема.
Даниэль Вуд
Обратите внимание на предупреждения, отображаемые в разделе «Статистика отправки» выходных данных «pod install --verbose» или «pod update --verbose», например, «yourApp [Debug]» переопределяет «HEADER_SEARCH_PATHS». `настройка сборки определена в ..." или "... target переопределяет настройку сборки` OTHER_LDFLAGS` ... ".
jk7
изменить предварительный просмотр конфигурации в разделе «Путь к сборке продуктов» , а затем выполнить установку pod. pod не сохраняет мое значение в проекте pod, любая помощь?
Лю Плутон
Ах! Проблема возникала сразу после создания новой конфигурации для расширений. Первые 3 шага помогают мне понять проблему. Спасибо!
iHarshil
70

Будьте уверены, что вы открываете .xcworkspace, а не.xcodeproj

Михал Гумни
источник
Это была моя проблема. Я открывал проект из обычного файла проекта Xcode. Как только вы начнете использовать какао-стручки, вам нужно начать открывать проект из файла .xcworkspace, а не из .xcodeproj.
HotFudgeSunday
хе-хе, я всегда так делаю :)
yeahdixon
ЭТО ЭТО ЭТО ЭТО
Брайан
OMG Я хочу обнять тебя. Изменено так много вещей, которые никогда не были проблемой с самого начала!
Кьонссон
53

Решение не сработало для меня, это действительно невыносимо, есть файл libpods.a(который был красного цвета), я удалил его, и все работает отлично! Приветствую меня;)

Hemang
источник
6
Случилось и со мной тоже. Я переименовал свою цель, и она создала этот проблемный артефакт .a файл.
seenickcode
Если я сделаю это, то библиотеки, которые я добавил с помощью Cocoapods, не будут добавлены в проект.
Франциско Корралес Моралес
1
ты сделал мой день: D, было 2 цели, и я удалил одну, но ее блоки еще и не удалось построить, решено просто удалением ссылки на
блоки
То же самое случилось со мной. Это был старый проект, к которому я не прикасался годами, и все еще имел старый формат Podfile etcetera.
Departamento B
46

Я разделил свои списки стручков в Podfileдля различных целей, таких как:

target :ABC do
  pod 'KissXML', '~> 5.0'
  pod 'libPhoneNumber-iOS', '~> 0.7.2'
end

target :ABCTests do
  pod 'OCMock', '~> 2.2.1', :inhibit_warnings => true
end

И побежал pod install

Это создало новую библиотеку, libPods-ABC.aс которой мой бинарный файл должен был ссылаться. Но ошибка в том , что она не удалить предыдущую библиотеку ИЭ libPods.a.

Решение: Удалите библиотеку libPods.aиз Build Phasesиз Link Binary With Libraries.

Аюш Гоэль
источник
Это то же исправление, что и для stackoverflow.com/a/23085107/581994 и stackoverflow.com/a/21694261/581994
Hot Licks
2
Решение другое. Это исправило это для меня, используя это точное решение.
Cynistersix
Удалите библиотеку libPods.a, а затем, pod install, решите проблему для меня.
Бисма
1
исправлено при экспорте ошибки IPHONEOS_DEPLOYMENT_TARGET = 9.0 с «ld: библиотека не найдена для -lPods»
jacksonfdam
Работает для меня, после того как я переименую цель.
alsantos123
46

У меня был указан старый файл libPod.a (вероятно, из-за меня меняющихся целей).

Настройки проекта -> Этапы сборки -> Связать двоичные файлы с библиотеками

Как правило, cocoapods включает только одну библиотеку, такую ​​как libPods-target.aили libPods.a. Я решил это, удалив дубликат.

Себастьян Ходжас
источник
5
Это сработало для меня. Я добавлял поддержку pod для целей тестирования (* Tests и * UITests), и базовая конфигурация изменилась с Pods.debugна Pods-MyApp.debug, так что теперь мне нужно только libPods-MyApp.a(был значок «выцветший» для старого libPods.a),
Николас Миари
Для меня не было исчезнувшей иконки, но это было единственное решение, которое сработало.
Йогеш Махешвари
Тоже самое. Спасибо
rmvz3
Я изменил название проекта, и произошла ошибка. Выше решение сработало для меня.
Guness
44

если у вас возникли проблемы с этим на cocoapods v25 / Xcode 5

Проект Pods Xcode теперь устанавливает для параметра сборки ONLY_ACTIVE_ARCH значение YES в конфигурации отладки. Вы должны будете установить то же самое в вашем проекте / цели, иначе сборка не удастся.

https://github.com/CocoaPods/CocoaPods/wiki/FAQ#running-into-build-failures-after-migrating-to-xcode-5-and-cocoapods-0250

ОБНОВЛЕНИЕ Убедитесь, что у вас есть последние драгоценности / Cocoapods

  • система обновления драгоценных камней
  • обновление драгоценного камня cocoapods

Вы захотите пересобрать проект, используя Pod Install, чтобы пересобрать проект.

johndpope
источник
Это было для меня, после добавления CP в очень старый проект.
Джош Хадналл
То же самое для меня - добавил СР в очень старый проект, мог строить на симуляторе, но как только я переключился на сборку для устройства, сборка не удалась. Этот ответ очень помог!
Флориан
40

Если Xcode жалуется при связывании, например, Библиотека не найдена для -lPods, он не обнаруживает неявные зависимости.

Выберите «Продукт»> «Редактировать схему». Нажмите «Создать». Добавьте статическую библиотеку «Pods» и убедитесь, что она находится вверху списка. Очистите и соберите снова. Если это не сработает, убедитесь, что источник спецификации, которую вы пытаетесь включить, был вытащил из github. Сделайте это, посмотрев в / Pods /. Если оно пустое (не должно быть), убедитесь, что в ~ / .cocoapods / master //. Podspec указан правильный URL-адрес git-концентратора. Если по-прежнему не работает, проверьте настройки местоположения сборки XCode. Перейдите в «Настройки» -> «Местоположения» -> «Производные данные» -> «Дополнительно» и установите расположение сборки на «Относительно рабочей области».

http://docs.cocoapods.org/guides/getting_started.html

HoratioCain
источник
3
Первая часть исправила мою проблему («Продукт»> «Редактировать схему», добавьте блоки для сборки в качестве первого элемента). Спасибо
Уильям Пауэр
У меня была эта проблема в xCode 6.3 с cocoapods 0.36.0, и это то, что исправило ее. Спасибо!
ProgrammierTier
так же, как xcode 6.3 cocoapods 0.37 -> Спасибо! сходил с ума от настроек цели, в то время как проблема заключалась в схеме. просто добавьте стручки.
Альтагир
36

У меня была такая же проблема, когда я редактировал Podfile, добавляя цель, которую я использовал без цели ранее.

Podfile

target 'xxxx' do

pod 'xyz'
pod 'abc'    

end

После недолгих размышлений я обнаружил, что в целевых свойствах >> вкладка «Общие» >> раздел «Связанные фреймворки и библиотеки» появились новый libPods-xxxx.a и старый libPods.a

Я только что удалил libPods.a и все работало нормально.

Халед Аннажар
источник
Это было проблемой и для меня. Я думаю, что источником проблемы было то, что я обновил CocoaPods и формат Podfile во время разработки.
gklka
2
У меня был точно такой же сценарий после добавления цели на стручке. +1 за точность
Адриано Спадони
27

Вики CocoaPods на GitHub имеет ответ прямо в их FAQ :

  • Перейти к Product > Edit Scheme
  • Нажмите на Build
  • Добавьте статическую библиотеку Pods и убедитесь, что она находится вверху списка
  • Очистить и построить снова
  • Если это не сработает, убедитесь, что источник спецификации, которую вы пытаетесь включить, был извлечен из github. Сделайте это, заглянув внутрь <Project Dir>/Pods/<Name of spec you are trying to include>. Если оно пустое (не должно быть), убедитесь, что в ~/.cocoapods/master/<spec>/<spec>.podspecнем указан правильный URL-адрес github.
  • Если по-прежнему не работает, проверьте настройки местоположения сборки XCode. Перейдите Preferences -> Locations -> Derived Data -> Advancedи установите расположение сборки "Относительно рабочей области".

Скриншот

Крис Шиффхауэр
источник
6
Я тоже столкнулся с этой проблемой, но я не могу выполнить эти шаги. Я застрял в «Добавьте статическую библиотеку pods и убедитесь, что она находится вверху списка». Статическая библиотека не отображается, когда я нажимаю, чтобы добавить ее в схему сборки. Любая идея?
Бэй Филлипс
@BayPhillips Закройте текущий проект и откройте .xcworkspace, созданный в папке вашего проекта. затем появляется статическая библиотека
Juneho Nam
12

Я переименовывал проект в «NBSelector» из «Партнеры».

После переименования проекта произошла ошибка «Библиотека не найдена для libPods-Partners». Xcode пытался связать старый файл Partners.a. Просто удалите его, если у вас есть podInstalled после переименования.

введите описание изображения здесь

Налойко Евгений
источник
идеальное решение для моей проблемы :) но после удаления стручков нужно добавить его еще раз, если вы хотите его использовать
satheesh
11

Использование ONLY_ACTIVE_ARCH = NO во всех модулях решило проблему для меня. Чтобы сделать это постоянным, я добавил хук post_install к своему Podfile:

post_install do |installer_representation|
  installer_representation.project.targets.each do |target|
      target.build_configurations.each do |config|
            config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
      end
  end
end

pod install и вы сделали.

Мелье
источник
8

Вы создали «Распространение» или аналогичную конфигурацию для архивов Ad-Hoc и App Store? Как и многие другие, я следовал рекомендациям Apple и назвал конфигурацию «Release», назвал ее «Distribution» и установил для нее различные правила подписи. Ну, может быть, это была рекомендация, прежде чем они представили схемы и опцию «Распределить» в Организаторе, во всяком случае, я просто имел ее раньше.

Тогда у меня была такая же проблема со стручками. При отладке все работало хорошо, но архивирование не удалось с ошибкой ссылки. После того, как я попробовал то и это, я изменил конфигурацию архива моего исходного проекта с «Распространение» на «Выпуск», и ошибка связи исчезла.

Тем не менее, архив не показывался в Организаторе, хотя я мог найти его в файловой системе, но он имел размер 0.

Последним шагом для исправления всего этого было изменение настройки «Пропустить установку» для конфигурации «Освобождение» на «НЕТ». Обратите внимание, что вы должны сделать это только для вашего основного проекта, но не для проекта Pods. Лучше оставить проект Pods как есть, так как он генерируется каждый раз, когда вы запускаете 'pod install'.

Обновление Только что получил ответ от разработчиков CocoaPods. Мне кажется, это не работает, так как у меня правильно настроена конфигурация Pods. Но это может помочь кому-то еще.

i4niac
источник
8

В моем случае проблема заключалась в том, что для местоположения производных данных XCode была выбрана опция «Legacy». Цель CocoaPods (libPods.a) создавалась правильно, но Xcode искал ее не в том месте.

Переключение на «Уникальный» (по умолчанию) решило проблему. Вы можете сделать это, перейдя в «Настройки»> «Местоположения» и нажав кнопку «Дополнительно ...».

Адам Шарп
источник
Но я нахожусь в ситуации, когда мне нужно использовать «Legacy», продолжить поиск другого решения ...
CocoaBob
4

Если вы архивируете для iOS7 и Xcode5 и получили эти ошибки, перейдите по этой ссылке. Похоже, что Apple отказывается от архитектуры, которая необходима для какао-бобов https://github.com/CocoaPods/CocoaPods/pull/1352

Джон Пол Маноза
источник
4

Я обнаружил, что выбор «Найти неявные зависимости» (в рамках схемы продукта / редактирования) решит эту проблему вместо того, чтобы добавлять стручки в качестве цели.

StackRunner
источник
Также может помочь запуск установки pod после выполнения следующих действий.
StackRunner
3

Я рассмотрел каждый ответ здесь, но для меня это было безумно просто ... Перейдите в Target -> Build Phases, затем удалите libPods-YourProject.a, затем добавьте его снова, используя «+». Не беспокойтесь о том, что библиотека красная, это нормально.

cph2117
источник
3

Я использовал старую версию cocoapod после обновления cocoapods, он предлагает мне обновить установленный модуль из-за серьезного обновления, так как я обновляюсь после долгого времени. Я обновляю его и обновляю стручки новой версии. Но после этого я получил ошибку какlibrary not found for -lPods-xxxprojectName-xxxxxpodName

После того, как я попробовал так много решений, приведенных в ответе в этом разделе, у меня не получилось. Затем я пошел в настройки своего проекта и обнаружил, что путь стручков был изменен, который был наOther Linker Flag

Проверьте Manage Schemesправильность названия вашего стручка и сравните его. Other Linker FlagИзмените его, если он не похож

Старый путь был -l"lPods-xxxprojectName-xxxxxpodName"

Но новые стручки были только, xxxxxpodNameпоэтому я заменил Other Linker Flagна новую, как показано ниже

Изменен путь к стручку, -l"xxxxxpodName"и это работает.

Я не знаю точной причины этого, но, возможно, это поможет кому-то.

Bhavin_m
источник
3

Я открыл рабочее пространство, но получил ту же ошибку.

Построить активную архитектуру только для ДА

решить мою проблему.

Joeful6
источник
Что помогает. Спасибо. Каким-то образом для Debug было установлено значение «YES» только в то время, как для остальных настроек указано «NO», и я видел эту ошибку для всех сборок, кроме Debug.
Павел Якименко
Это только помогло мне. Такой ответ «Open as .workspace» слишком скучен. Я думаю, что разработчики должны сначала тщательно проверить руководство по установке ..
KoreanXcodeWorker
2

Решил это, выполнив следующие шаги:

  • Обновите установку cocoapods. ($ [sudo] gem install cocoapods)
  • Переустановите ваши зависимости под ваш проект. (установка под)
  • Очистить и перестроить / архив.
SarpErdag
источник
На самом деле это работало очень хорошо. Я обновил один из модулей в моем проекте, и это сломало его. Я следовал за этими шагами, и это работало. Это было быстрое решение. Спасибо
agarcian
2

В моем случае pod installисправлена ​​проблема, после создания схем распространения и выпуска.

kernix
источник
1

У меня такая же проблема при архивировании для отправки. Обсуждение этой проблемы можно найти здесь: https://github.com/CocoaPods/CocoaPods/issues/155.

Таким образом, у меня работают два метода:

  1. Настройка «Предпочтения -> Местоположения -> Дополнительно» на «Пользовательский (относительно рабочей области)» ИЛИ
  2. Установите Подфайл в - platform :ios, :deployment_target => "5.0"
BabyPanda
источник
1

Использование Xcode 5 с iOS 7

Это то, что я сделал после того, как застрял на час. Удалите ARM64 из Настройки сборки> Допустимая архитектура.

ДОБАВЛЕНО: Кроме того, для моего случая не было полученного местоположения данных. Я выбрал уникальное место для постройки.

ytbryan
источник
1

если вы используете iOS7 и Xcode 5, выполните:

  • Выберите ваш проект стручков.
  • Перейдите к целевым блокам и в настройках сборки выберите Архитектуры-> Стандартные архитектуры (armv7, armv7s).
  • Сделайте то же самое для каждой цели вашего проекта стручков.
rabenson
источник
1

Я пробовал КАЖДЫЙ ответ в этой теме безрезультатно. Наконец, я решил мою проблему, сопоставив «Путь к продуктам сборки до конфигурации» в моем целевом проекте со значением в проекте Pods. Оказывается, они строили в двух разных местах вывода. Ни одно из других предложений в этой теме не было актуально для меня. Было бы здорово, если бы XCode дал полезное описание ошибки (например, ПОЧЕМУ он не может использовать lib - файл не найден, соответствующая архитектура не найдена и т. Д.).

user3588900
источник
1

В этом выпуске, если вы уже установили и обновили модуль в своей системе, тогда ваш XCode не может найти библиотеку Pods. Для решения этой проблемы, пожалуйста, проверьте следующие причины, которые могут иметь место:

  1. Вы используете рабочее пространство.
  2. Сборка библиотеки Pods.
  3. Библиотека Pods упоминается в группе продуктов вашего проекта.
  4. Ваша цель включает библиотеку Pods в связи с фазой сборки фреймворков.
Gagan_iOS
источник
1

пытаться

link_with YouTarget1, YouTarget2 ...

Мой проект сработал, цели внезапно перестали компилироваться. Затем добавил "link_with" и вернулся в нормальное состояние.

Видимо, теперь он просто подключается к первой цели, вот что говорит ссылка:

http://guides.cocoapods.org/syntax/podfile.html#link_with

Вагнер Сэйлс
источник
этот исправил это для меня ... была проблема, что первая цель строилась, а вторая цель потерпела неудачу с "ld: библиотека не найдена для -lPods ..."
Muxor
1

Если вы все еще получаете эту проблему, попробуйте:

pod update

Сделал работу для меня, надеюсь, это поможет вам.

Шобхит С
источник