343

归档项目时出现错误。这是我的环境。

  • Mac OS 狮子
  • 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 是我用来管理 XCode 项目依赖项的 CocoaPods。 https://github.com/CocoaPods/CocoaPods

这是我的 Podfile

platform :ios  
dependency 'libPusher', '1.1'

我不确定错误是什么意思?

4

42 回答 42

621

您是否打开工作区(由 CocoaPods 生成)而不是 xcodeproj?

于 2012-04-03T07:25:38.047 回答
172

我通过使用将应用程序和 Podfile 中的测试目标分开

target :App do
    …
end

target :AppTests do
    …
end

这导致了两个新产品libPods-App.alibPods-AppTests.a,它们使之前的产品libPods.a过时了。我不得不从两个目标的Build Phases配置的Link Binary With Libraries 部分中删除该产品。

于 2014-04-15T13:25:51.340 回答
120

我今天遇到了类似的问题。

  1. 我设置了一个新项目
  2. 我安装了可可豆荚
  3. 我创建了一个新配置Preview以及现有的DebugRelease
  4. 现在,当在这个新Preview配置上编译时,编译器将无法与 Pod 链接并给我这个消息:

    ld: library not found for -lPods
    

解决方案:

我必须做的就是跑

 pod install

再次为新Preview配置配置 cocoapods。它更新了我的项目、工作区和 Pod 的项目文件,问题消失了

于 2013-01-02T12:53:07.163 回答
74

确保你打开.xcworkspace,而不是.xcodeproj

于 2013-01-08T23:03:22.850 回答
53

没有一个解决方案对我有用,这真的难以忍受,有一个文件libpods.a(红色的)我删除了它,一切正常!为我干杯;)

于 2014-11-04T11:41:21.067 回答
47

我指定了一个旧的 libPod.a 文件(可能是由我更改目标引起的)。

项目设置->构建阶段->将二进制文件与库链接

通常,cocoapods 只会包含一个库,例如libPods-target.alibPods.a。我通过删除重复来解决它。

于 2016-01-22T13:16:52.040 回答
46

我将我的 pod 列表划分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

于 2014-06-21T11:23:10.907 回答
44

如果你在 cocoapods v25 / Xcode 5 上遇到这个问题

Pods Xcode 项目现在在 Debug 配置中将 ONLY_ACTIVE_ARCH 构建设置设置为 YES。您必须在项目/目标上设置相同的值,否则构建将失败。

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

更新确保你有最新的宝石/可可豆

  • 宝石更新系统
  • gem 更新 cocoapods

您将需要使用 Pod Install 来重建项目以重建项目。

于 2013-10-15T09:10:32.913 回答
40

如果 Xcode 在链接时抱怨,例如找不到 -lPods 的库,它不会检测到隐式依赖项。

转到 Product > Edit Scheme 单击 Build 添加 Pods 静态库,并确保它位于列表顶部 Clean and build again 如果这不起作用,请验证您尝试包含的规范的源代码从github拉。通过查看 /Pods/ 来执行此操作。如果它是空的(不应该是),请验证 ~/.cocoapods/master//.podspec 中是否包含正确的 git hub url。如果仍然不起作用,请检查您的 XCode 构建位置设置。转到首选项 -> 位置 -> 派生数据 -> 高级并将构建位置设置为“相对于工作区”。

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

于 2013-09-24T16:40:42.677 回答
36

当我编辑 Podfile 添加我之前使用的没有目标的目标时,我遇到了同样的问题。

播客文件

target 'xxxx' do

pod 'xyz'
pod 'abc'    

end

在想了想之后,我发现在目标属性>>常规选项卡>>链接框架和库部分下,有新的 libPods-xxxx.a 和旧的 libPods.a

我刚刚删除了 libPods.a,一切正常。

于 2015-04-06T13:53:04.800 回答
27

GitHub 上 CocoaPods 的 wiki在他们的 FAQ 中有答案

  • Product > Edit Scheme
  • 点击Build
  • 添加 Pods 静态库,并确保它位于列表顶部
  • 清理并重新构建
  • 如果这不起作用,请验证您尝试包含的规范的源代码是否已从 github 中提取。通过查看来做到这一点<Project Dir>/Pods/<Name of spec you are trying to include>。如果它是空的(不应该是),请验证其中~/.cocoapods/master/<spec>/<spec>.podspec是否包含正确的 github url。
  • 如果仍然不起作用,请检查您的 XCode 构建位置设置。转到Preferences -> Locations -> Derived Data -> Advanced并将构建位置设置为“相对于工作区”。

截屏

于 2013-11-30T23:46:19.877 回答
12

我将项目从“合作伙伴”重命名为“NBSelector”。

重命名项目后出现“找不到 libPods-Partners 的库”错误。Xcode 试图链接到旧的 Partners.a 文件。如果重命名后有 podInstalled,只需将其删除。

在此处输入图像描述

于 2014-02-11T05:58:29.967 回答
11

在所有 pod 中使用 ONLY_ACTIVE_ARCH=NO 为我解决了这个问题。为了使这个持久化,我在我的 Podfile 中添加了一个 post_install 钩子:

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你就完成了。

于 2014-01-30T09:53:33.523 回答
8

您是否创建了“分发”或类似配置来制作 Ad-Hoc 和 App Store 存档?像许多其他人一样,我遵循 Apple 的建议并将其称为“发布”配置,将其称为“分发”并为其设置不同的签名规则。好吧,也许这是他们在 Organizer 中引入方案和“分发”选项之前的建议,无论如何,我只是从以前开始。

然后我对 Pod 也有同样的问题。调试时一切正常,但存档因链接错误而失败。在尝试了这个之后,我将原始项目的存档配置从“分发”更改为“发布”,链接错误消失了。

然而存档没有出现在管理器中,虽然我可以在文件系统中找到它,但它的大小为 0。

解决这一切的最后一步是将“发布”配置的“跳过安装”设置更改为“否”。请注意,您必须仅对您的主项目执行此操作,而不是对 Pods 项目执行此操作。最好让 Pods 项目保持原样,因为它是在您每次运行“pod install”时生成的。

更新 刚刚从 CocoaPods 开发人员那里得到了答案 它似乎对我不起作用,因为我正确设置了 Pods 配置。但它可以帮助别人。

于 2012-05-23T03:58:03.007 回答
8

在我的例子中,问题是 Xcode 的 Derived Data 位置被设置为“Legacy”选项。CocoaPods 目标 (libPods.a) 正在正确构建,但 Xcode 正在寻找错误的位置。

将其切换为“唯一”(默认)解决了这个问题。您可以通过转到 Preferences > Locations 并单击 Advanced... 按钮来执行此操作。

于 2013-05-29T00:00:30.523 回答
5

只有将“库搜索路径”(在“MyProject”的构建设置中)添加到“Pods/build/Debug-iphonesimulator”对我有用(使用模拟器时)。

从这里得到它: https ://github.com/CocoaPods/CocoaPods/issues/121#issuecomment-5452473

于 2013-02-13T23:38:49.633 回答
4

如果您正在为 iOS7 和 Xcode5 存档并遇到这些错误,请参阅此链接。似乎苹果正在放弃可可豆荚所需的架构 https://github.com/CocoaPods/CocoaPods/pull/1352

于 2013-09-22T22:13:32.433 回答
4

我发现选择“查找隐式依赖项”(在产品/编辑方案下)将解决此问题,而不必将 pod 添加为目标。

于 2014-07-08T16:42:47.847 回答
3

我在这里查看了所有答案,但对我来说这非常简单......转到目标 -> 构建阶段,然后删除 libPods-YourProject.a,然后使用“+”再次添加它。不用担心库被红了,没关系。

于 2014-08-20T19:30:59.390 回答
3

我在更新 cocoapods 后使用了旧的 cocoapod 版本,它建议我更新已安装的 pod,因为我在很长时间后更新时进行了重大更新。我更新了它,新版本的 pod 更新得很好。但在那之后我得到了错误library not found for -lPods-xxxprojectName-xxxxxpodName

在尝试了这么多解决方案作为这个问题的答案之后,这些都不适合我。然后我去了我的项目设置,发现 pods 路径发生了变化Other Linker Flag

检查您Manage Schemes的 pod 名称是否正确并进行比较Other Linker Flag,如果不相似则更改

旧的 pod 路径是-l"lPods-xxxprojectName-xxxxxpodName"

但是只有新的豆荚,xxxxxpodName所以我用Other Linker Flag下面的新豆荚替换了

更改为 pod 路径-l"xxxxxpodName",它的工作。

我不知道这背后的完美原因,但可能对某些人有帮助。

于 2016-06-15T05:53:07.350 回答
3

我确实打开了工作区,但得到了同样的错误。

Build Active Architecture Only 设置为YES

解决我的问题。

于 2018-10-12T06:17:45.197 回答
2

通过采取以下步骤解决了它:

  • 更新你的 cocoapods 安装。($ [sudo] gem install cocoapods)
  • 在项目下重新安装依赖项。(吊舱安装)
  • 清理并重新构建/存档。
于 2013-09-25T11:26:34.437 回答
2

在我的情况下pod install,在创建分发和发布方案后解决了这个问题。

于 2013-11-27T08:25:08.593 回答
2

这里写的没有任何帮助——但它确实让我走上了正确的道路。我最终做的是以下内容:

  1. 分析错误信息。

    它说Library not found: -lPods-..。所以它找不到那个特定的库。如何解决?好吧,确保这个库在搜索路径中。那么这个图书馆在哪里呢?

  2. 搜索图书馆所在的位置。

    我在我的文件夹中输入find . | grep -e 'Pods-.*\.a'了一个终端。~/Library/Developer/Xcode/DerivedData我发现我的libPods-... 图书馆位于很多地方,例如~/Library/Developer/Xcode/DerivedData/[generated-name]/Build/Products/Release-iphonesimulator/libPods-[name].a

  3. 将这些文件夹之一添加到库搜索路径

    如果我们将这些文件夹之一添加到库搜索路径,那么问题就会消失。但是,在我的情况下,所有路径都有一个[generated-name]文件夹[Project]-guyraaahpczkqmhghlwgsdsqyxxs

    那么我们如何负责任地将该文件夹添加到搜索路径中呢?通过使用构建时间变量!我们可以通过查看这个答案来获得存在哪些变量的列表。事实证明,定义的变量之一被称为${PODS_CONFIGURATION_BUILD_DIR},并且在那个确切的文件夹中 mylibPods-[Product].a位于!

  4. 现在将该文件夹添加到库搜索路径。

    这是简单的部分,也是我对这个问题的实际答案。转到Build Settings -> Search paths -> Library search,确保它已折叠,然后双击<Multiple Values>

    在弹出的对话框中,单击左下角的小“+”号。现在键入"${PODS_CONFIGURATION_BUILD_DIR}",并将下拉选项保留为“非递归”。键入 <Enter>。现在将这个条目一直向上拖动,使其直接位于$(inherited).

  5. 你完成了。重建您的产品!

    我的错误现在消失了。Upvote这个答案,关闭标签,忘记曾经存在的问题

于 2020-08-18T07:34:15.567 回答
1

尝试

link_with 'YouTarget1', 'YouTarget2' ...

我的项目成功了,目标突然停止编译。然后添加“link_with”并恢复正常。

显然,现在它只是连接到第一个目标,链接是这样说的:

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

于 2014-10-28T16:04:06.373 回答
1

归档提交时遇到了同样的问题。关于这个问题的讨论可以在这里找到:https ://github.com/CocoaPods/CocoaPods/issues/155

总之,两种方法对我有用:

  1. 将“首选项 -> 位置 -> 高级”设置为“自定义(相对于工作区)”或
  2. 将 Podfile 设置为- platform :ios, :deployment_target => "5.0"
于 2013-07-31T07:46:40.383 回答
1

如果您使用的是 iOS7 和 Xcode 5,请执行以下操作:

  • 选择您的 Pods 项目。
  • 转到 Target Pods 并在 Build Settings 中选择 Architectures-> Standard architectures (armv7, armv7s)。
  • 对 Pods 项目的每个 Target 执行相同的操作。
于 2014-02-06T09:03:16.400 回答
1

我尝试了此线程中的每个答案均无济于事。最后通过将目标项目中的“预配置构建产品路径”与 Pods 项目中的值匹配来解决我的问题。原来他们正在建造两个不同的输出位置。该线程中的其他建议均与我无关。如果 XCode 提供了有用的错误描述(例如为什么它不能使用 lib - 未找到文件、未找到匹配的架构等),那就太好了。

于 2014-04-30T10:36:04.293 回答
1

在 iOS 7 中使用 Xcode 5

这是我被困一个小时后所做的。从 Build Setting > Valid Architecture 中删除 ARM64。

补充:另外,就我而言,它不是派生数据位置。我选择 unique 作为构建位置。

于 2013-10-09T00:32:12.783 回答
1

在这个问题中,如果您的系统中已经安装和更新了 pod,那么您的 Xcode 无法找到 Pods 库。要解决此问题,请检查可能发生的以下原因:

  1. 您正在使用工作区。
  2. Pods 库构建。
  3. Pods 库在项目的产品组中被引用。
  4. 您的目标在与框架构建阶段的链接中包含 Pods 库。
于 2014-06-05T14:20:57.797 回答
1

如果您仍然遇到此问题,请尝试:

pod update

为我做了工作,希望这对你有帮助。

于 2016-08-29T10:45:19.497 回答
0

就我而言,此链接中常见问题解答的第 4 条提供了帮助: https ://github.com/CocoaPods/CocoaPods/wiki/Creating-a-project-that-uses-CocoaPods

如果问题仍然存在,您可以尝试其他一些方法。

于 2013-06-12T16:55:21.677 回答
0

尝试打开 xcworkspace 文件而不是 xcodeproj 文件

于 2013-05-11T04:23:55.380 回答
0

将 some_project.workspace 文件重命名为 some_project.workspace.backup 并运行 $pod install。它创建了一个新的工作区文件并且错误消失了。

于 2013-09-12T03:41:16.613 回答
0

我也有,Cocoapods 版本 0.28.0

在这里轻松修复,无需冗长阅读: - 卸载 Cocoapods(命令行或 AppCode) - 删除 Podfile、Podfile.lock、Pods 文件夹

  • 重新安装 Cocoapods
  • 启动新创建的工作区。
于 2013-11-27T23:48:36.867 回答
0

我遇到过同样的问题。就我而言,它原来是一个 xCode 错误。我所要做的就是删除“有效拱门”,清理干净,重新添加它们,我就可以走了。一般也尝试更新的cocoapods。

于 2014-01-21T22:41:26.320 回答
0

我通过为所有 pod 设置与我的项目相同的架构和有效架构解决了这个问题。所以在我的案例中,漏洞解决方案是:

  • 更新可可豆荚:sudo gem 更新可可豆荚
  • 更新 pod:pod 更新
  • 在您的 Pod 中,转到您的 Build settings > Architectures 并在此处将 Architectures 和 Valid Architectures 设置为与主项目中完全相同的值。
于 2014-04-01T10:56:24.173 回答
0

删除 CocoaPods 缓存文件夹 ~/Library/Caches/CocoaPods 和安装 pod 对我有用。

于 2017-12-21T09:59:07.857 回答
0

我错过libPods.atarget,所以要做的第一件事就是将它添加到链接的框架和库中。

接下来,Product -> Build for -> Profiling (或者在添加 libPods.a 之前,如果你完全错过了它)

最后在构建阶段检查您的Copy Pods 资源脚本(如果它与您的第二个目标相同 - 它有时取决于 Podfile 及其目标)。然后你应该成功构建。

于 2015-12-05T10:16:10.473 回答
0

为了简化@i4niac 的回答:

另一个常见的原因是 Scheme 的构建配置不匹配。在我们的例子中,我们的“AppName-AppStore”方案将“发布”作为存档构建配置而不是“AppStore”(对于其他人来说可能是相反的方式)。

于 2015-08-10T18:42:04.883 回答
0

我遇到了一个问题,我创建了我自己的.xcworkspace,它保持 pod 的形式创建它自己的(它在哪里附加它的库)。

解决方案

我移动了.xcworkspace我创建的,pod install再次运行,然后手动将我的与通过打开两个工作区并将文件从一个工作区拖到另一个工作区创建.xcworkspace的一个pod合并。

于 2017-04-19T15:24:04.887 回答
-1

我厌倦了所有的答案,最后我能够通过将 pod 库添加到 Xcode 构建方案中来修复它,在我能够运行它之后,尝试从构建方案中删除它,但它对我来说仍然很好。无法弄清楚确切的原因。

于 2015-07-05T11:41:00.740 回答