бібліотеку не знайдено для -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

Це мій Podfile

platform :ios  
dependency 'libPusher', '1.1'

Я не впевнений, що означає помилка?


Причина проблеми в тому, що жодна з відповідей не охоплювала. перевірити цю відповідь тут: 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
Зауважте, що проект, з яким ви використовуєте стручки, також повинен мати його архітектуру, встановлену на armv6 armv7 (якщо це варіант, який ви використовуєте в архітектурі проекту стручки). Якщо цього не зробити, ви отримаєте ту саму помилку.
Патрік Басут

173

Я розділив додаток і тестові цілі в Podfile, використовуючи

target :App do
    
end

target :AppTests do
    
end

Це призвело до появи нових нових продуктів libPods-App.a та libPods-AppTests.a відповідно, і вони зробили попередній продукт libPods.a застарілим. Я повинен був видалити цей продукт з Link Binary з бібліотеками секції з Побудувати Фази конфігурації обох цілей.


3
Так, це було для мене, спробувавши десяток інших речей раніше в цій темі. У моєму підфілі є дві цілі, як описано вище, і тому libPods.a не будувався. Видалення libPods.a з розділу Link Binary With Libraries "виправило" його (хоча, звичайно, зараз у мене є 32 повідомлення "Не визначені символи", щоб розібратися, через відсутність вкладки SQLite тощо)
Hot Licks

Це те саме виправлення, що і stackoverflow.com/a/21694261/581994 та пара інших.
Гарячі лизання

Наразі все ще виникає проблема
nsantorello

"вони зробили попередній продукт libPods.a застарілим. Мені довелося видалити ..."
Василь

Це було головним чином для мене питанням. Чомусь у мене також був двійковий файл від старішої тестової цілі.
LJ Wilson

119

Я сьогодні зіткнувся з подібною проблемою.

  1. Я налаштовую новий проект
  2. Я встановив какао-стручки
  3. Я створив нову конфігурацію Previewразом із існуючою DebugтаRelease
  4. Тепер під час компіляції цієї нової Previewконфігурації компілятор не зможе зв’язатись із Pods та передає мені це повідомлення:

    ld: library not found for -lPods

Рішення:

Що мені довелося зробити - це бігти

 pod install

знову і таким чином налаштовуючи какаоди для нової Previewконфігурації. Це оновило мій проект, робочу область та файл проекту Pod, і проблема зникла


1
Це і мене вигнало. Тим більше, що він продовжував працювати довго після того, як я створив конфігурації, і лише тоді, коли я очистив отримані дані, виникла проблема.
Даніель Вуд

І зверніть увагу на попередження, що відображаються у розділі "Статистика надсилання" виводу або "pod install --verbose", або "оновлення pod - verbose", наприклад, ціль "yourApp [Debug]" замінює значення "HEADER_SEARCH_PATHS" `налаштування збірки, визначене в ..." або "... ціль переосмислює налаштування збірки" OTHER_LDFLAGS` ... ".
jk7

змінити конфігурацію попереднього перегляду в конфігурації «Побудова продуктів» , а потім встановити стручок, струк не зберігає моє значення в проекті стручка, будь-яка допомога?
лю плуто

Ах! Проблема виникла відразу після створення нової конфігурації для розширень. Перші 3 кроки допомагають мені зрозуміти проблему. Дякую!
iHarshil

70

Будьте впевнені, що ви відкриваєте .xcworkspace, ні.xcodeproj


Це було моє питання. Я відкривав проект із звичайного файлу проекту Xcode. Після того як ви почнете використовувати какао-стручки, вам потрібно почати відкривати проект із файлу .xcworkspace, а не з .xcodeproj.
HotFudgeSunday

хе-х, я завжди так роблю :)
yeahdixon

ЦЕ ЦЕ ЦЕ
Брайан

OMG Я хочу тебе обійняти. Змінилося стільки речей, що ніколи не було проблеми з цього!
kjonsson

53

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


6
Сталося і в мене. Я перейменував свою ціль, і це створило цей проблемний файл артефакту .a.
sawickcode

Якщо я це роблю, то мочки, які я додав за допомогою Cocoapods, не додаються до проекту.
Франциско Корралес Моралес

1
u зробив мій день: D, було 2 цілі, і я видалив одну, але її стручки все ще не вдалося створити, вирішено просто видалити посилання на стручки цієї цілі
mohammad alabid

Те саме сталося і зі мною. Це був старий проект, якого я не чіпав роками, все ще мав старий формат Podfile etcetera.
Департамент Б

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, а потім, встановіть струк, вирішіть проблему.
бісма

1
це вирішено, коли помилка експортується IPHONEOS_DEPLOYMENT_TARGET = 9.0 з "ld: бібліотека не знайдена для -lPods"
jacksonfdam

Діє на мене, після того як я перейменую ціль.
alsantos123

46

У мене був вказаний старий файл libPod.a (ймовірно, викликаний зміною мішеней).

Налаштування проекту -> Фази збірки -> Пов’язати бінарне з бібліотеками

Зазвичай какаоди включають лише одну бібліотеку, таку як libPods-target.aабо libPods.a. Я вирішив це, видаливши дублікат.


5
Це працювало для мене. Я додав підтримку стручка для тестових цілей (* Тести і * UITests), а базову конфігурацію змінили з Pods.debugна Pods-MyApp.debug, тому зараз мені потрібно лише libPods-MyApp.a(там була стара "зів'яла" піктограма для старої libPods.a),
Ніколас Міарі

Для мене не було жодної згаслої ікони, але це було єдиним рішенням, яке працювало.
Йогеш Махешварі

Те ж саме. Спасибі
rmvz3

Я змінив назву проекту, і помилка трапляється. Вище рішення працювало на мене.
guness

44

якщо у вас виникли проблеми з цим на cocoapods v25 / Xcode 5

Проект Pods Xcode тепер встановлює налаштування збірки ONLY_ACTIVE_ARCH на ТАК у налаштуваннях налагодження. Вам потрібно буде встановити те ж саме у своєму проекті / цілі, інакше збірка не вдасться.

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

ОНОВЛЕННЯ Переконайтеся, що у вас найсвіжіші дорогоцінні камені / какаоподи

  • система оновлення дорогоцінних каменів
  • какао оновити дорогоцінні камені

Ви хочете відновити проект, використовуючи Pod Install для відновлення проекту.


Це було для мене після додавання CP до дуже старого проекту.
Josh Hudnall

Те саме для мене - додав CP до дуже давнього проекту, міг би побудувати на тренажері, але, як тільки я перейшов на створення пристрою, збірка не вдалася. Ця відповідь дуже допомогла!
Флоріан

40

Якщо Xcode скаржиться при посиланні, наприклад, Бібліотека не знайдена для -lPods, вона не виявляє неявних залежностей.

Перейдіть до продукту> Редагувати схему. Клацніть на збір. Додати статичну бібліотеку Pods та переконайтесь, що вона знаходиться у верхній частині списку Очистити та створити знову. Якщо це не працює, перевірте, що джерело для специфікації, яку ви намагаєтеся включити, було витягнув з github. Зробіть це, заглянувши в / Pods /. Якщо він порожній (його не повинно бути), переконайтеся, що ~ / .cocoapods / master //. Podspec має в ньому правильний URL-центр git. Якщо все ще не працює, перевірте налаштування розташування для побудови XCode. Перейдіть до Налаштування -> Місцеположення -> Отримані дані -> Розширене і встановіть місце складання на "Відносно робочої області".

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


3
Перша частина виправила мою проблему (Продукт> Редагувати схему, додайте Pods для складання як перший елемент). Дякую
William Power

У мене виникла ця проблема в xCode 6.3 з cocoapods 0.36.0, і це вирішило її. Дякую!
ProgrammierTier

те саме, що xcode 6.3 cocoapods 0,37 -> Дякую !! божеволіла від цільових налаштувань, тоді як проблема полягала в схемі. просто додайте Pods.
altagir

36

У мене була така ж проблема, коли я редагував 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
Я також зіткнувся з цим питанням, але я не можу зробити ці кроки. Я застрягаю у "Додайте статичну бібліотеку стручків і переконайтесь, що вона знаходиться у верхній частині списку". Статична бібліотека не відображається, клацнувши, щоб додати її до схеми збірки. Будь-яка ідея?
Bay Phillips

@BayPhillips Закрийте поточний проект та відкрийте .xcworkspace, створений у вашій папці проекту. то з’являється статична бібліотека
Джунхо Нам

12

Я перейменував проект на "NBSelector" від "Партнери".

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

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


ідеальне рішення для моєї проблеми :), але після видалення стручків потрібно знову додати його, якщо ви хочете використовувати його
satheesh

11

Використання ONLY_ACTIVE_ARCH = НІ у всіх стручках вирішив проблему для мене. Щоб зробити це стійким, я додав гачок 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 і отримав назву "Випуск" конфігурації, назвав її "Розподіл" і встановив для неї різні правила підписання. Ну, можливо, це була рекомендація, перш ніж вони запровадили схеми та опцію "Поширити" в Організаторі, все одно, я просто мав це раніше.

Тоді у мене були ті ж проблеми з Pods. Це все спрацювало добре під час налагодження, але архівування не вдалось із помилкою посилання. Спробувавши це, я змінив конфігурацію архіву мого оригінального проекту з "Розподіл" на "Випуск", і помилка посилання відпала.

Але архів не з’явився в Організаторі, хоча я міг знайти його у файловій системі, але він мав 0 розмір.

Останнім кроком, щоб виправити все це, було змінити параметр "Пропустити встановлення" для конфігурації "Відпустити" на "НІ". Зауважте, що ви повинні робити це лише для свого основного проекту, але не для проекту Pods. Краще залиште проект Pods таким, яким він є, оскільки він генерується щоразу, коли ви запускаєте "pod install".

Оновлення Щойно я отримав відповідь від CocoaPods devs Це, здається, не працює для мене, оскільки у мене була правильно встановлена ​​конфігурація Pods. Але це могло б допомогти комусь іншому.


8

У моєму випадку проблема полягала в тому, що місцеположення отриманих даних Xcode було встановлено на параметр "Legacy". Ціль CocoaPods (libPods.a) будувалася правильно, але Xcode шукав її не в тому місці.

Переключення на "Унікальний" (за замовчуванням) вирішило проблему. Це можна зробити, перейшовши в Налаштування> Місцеположення та натиснувши кнопку Додатково ....


Але я знаходжусь у ситуації, що мені доведеться використовувати "Спадщина", продовжувати пошук іншого рішення ...
CocoaBob



4

Я виявив, що вибір "Знайти неявні залежності" (за схемою продукту / редагування) вирішить цю проблему, замість того, щоб додавати стручки в якості цілі.


Також повторне встановлення установки знову може допомогти, виконуючи ці дії.
StackRunner

3

Я переглянув кожну відповідь тут, але для мене це було шалено просто ... Перейдіть до Цільового -> Фази збірки, потім видаліть libPods-YourProject.a, а потім додайте його знову за допомогою "+". Не хвилюйтеся, що бібліотека червона, це добре.


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"і це працює.

Я не знаю ідеальної причини цього, але, можливо, це допоможе хтось.


3

Я відкрив робочу область, але отримав ту ж помилку.

Створіть активну архітектуру лише встановлено YES

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


Це допомагає. Дякую. Якось було встановлено "ТАК" лише для налагодження, тоді як у інших конфігурацій є "НІ", і я бачив цю помилку для всіх збірок, крім налагодження.
Павло Якименко

Це мені тільки допомогло. Така відповідь "Відкрити як .workspace" занадто нудна. Я думаю, розробники повинні спочатку перевірити встановлення
керівних

2

Вирішили це, виконавши наведені нижче дії.

  • Оновіть установку какаоподів. ($ [sudo] дорогоцінний камінь встановити какаоди)
  • Перевстановіть свої залежності під свій проект. (установка стручка)
  • Очистити та відновити / архівувати.

Це насправді спрацювало дуже добре. Я оновив одну зі стручок у своєму проекті, і це зламало. Я дотримувався цих кроків, і це спрацювало. Це було швидко виправити. Дякую
agarcian

2

У моєму випадку pod installвиправлена ​​проблема після створення схем дистрибуції та випуску.


1

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

Підсумовуючи, для мене працюють два методи:

  1. Встановити "Налаштування -> Місцеположення -> Додатково" на "Спеціальне (відносно робочої області)" АБО
  2. Встановіть Podfile на - platform :ios, :deployment_target => "5.0"

1

Використання Xcode 5 з iOS 7

Це я зробив після того, як затримався протягом години. Видаліть ARM64 з Налаштування збірки> Дійсна архітектура.

ДОДАТО: Також для мого випадку не було отримано дані про місцезнаходження. Я вибрав унікальне місце для побудови.


1

якщо ви використовуєте iOS7 та Xcode 5, зробіть:

  • Виберіть свій проект Pods.
  • Перейдіть до Цільових Pods та в Налаштуваннях збірки виберіть Архітектури-> Стандартні архітектури (armv7, armv7s).
  • Зробіть те саме для кожної цілі вашого проекту Pods.

1

Я намагався КОЖНУ відповідь у цій темі безрезультатно. Нарешті вирішив мою проблему, зіставивши "Шлях продуктів до конфігурації" в моєму цільовому проекті зі значенням проекту Pods. Виявляється, вони будували для двох різних вихідних місць. Жодна з інших пропозицій у цій темі для мене не була актуальною. Було б чудово, якби XCode дав корисний опис помилок (наприклад, ЧОМУ він не може використовувати lib - Файл не знайдено, Архів не знайдено відповідної архітектури тощо).


1

У цьому випуску, якщо ви вже встановили та оновили стручок у вашій системі, ваш Xcode не в змозі знайти бібліотеку Pods. Щоб вирішити цю проблему, будь ласка, перевірте такі причини, які можуть мати місце:

  1. Ви використовуєте робочу область.
  2. Бібліотека Pods будується.
  3. Бібліотека Pods посилається на групу продуктів вашого проекту.
  4. Ціль включає бібліотеку Pods у зв'язку із фазою побудови рамки.

1

спробуйте

link_with 'YouTarget1', 'YouTarget2' ...

Мій проект спрацював, цілі раптом перестали складатися. Потім додали "link_with" і повернулися до нормального.

Мабуть, тепер вона просто підключається до першої цілі, так говорить посилання:

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


ця виправила це для мене ... виникла проблема, що перша мета була побудована, а друга не вдалася з "ld: бібліотека не знайдена для -lPods ..."
Muxor

1

Якщо ви все ще отримуєте це питання, спробуйте:

pod update

Зробив роботу для мене, сподіваюсь, це допоможе тобі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.