找不到-lPods库

348

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

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

这是我的 Podfile。

platform :ios  
dependency 'libPusher', '1.1'

我不确定这个错误的含义是什么?


一个问题的原因,没有任何答案涉及。在这里检查答案:https://dev59.com/wGAg5IYBdhLWcg3wBXER#29497314 - hasan
42个回答

624
你是不是打开了由 CocoaPods 生成的 Workspace 而不是 xcodeproj 文件?

28
我做了。将Pods项目的发行架构更改为“armv6 armv7”后,问题已得到解决。 - angelokh
11
好的,根据您的 Podfile,请这样指定平台: platform :ios, :deployment_target => "3.2"。下次运行 pod install 就会正确配置。 - alloy
255
为了让新手明白,你应该打开 .xcworkspace 文件而不是 .xcodeproj 文件。这样,除了你的项目之外,Xcode 还知道 Pods/ 目录中的项目以及如何构建 libPods.a - Jonathan Tran
13
继@JonathanTran的评论之后...如果你已经打开了.xcodeproj文件,需要在打开.xcworkspace文件之前将其关闭。 - Ross
4
请注意,您正在使用pods的项目也应该将其架构设置为armv6 armv7(如果这是您在pods项目架构中使用的选项)。 如果您没有这样做,您将会遇到完全相同的错误。 - Patrick Bassut
显示剩余3条评论

172

我使用Podfile将应用和测试目标分开

target :App doend

target :AppTests doend

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


3
是的,这对我来说就是这样,在尝试了本讨论串中的其他十几种方法后。我的 podfile 有两个目标,所以 libPods.a 没有被构建。从“链接二进制文件库”部分中删除 libPods.a “修复”了它(尽管现在我需要处理 32 个“未定义符号”消息,由于缺少 SQLite 库等原因)。 - Hot Licks
这是与https://dev59.com/Imkw5IYBdhLWcg3wfKhA#21694261和其他几个相同的修复。 - Hot Licks
目前仍存在一个问题。 - nsantorello
他们使之前的产品libPods.a过时了。我不得不删除... - Vassily
这对我来说大部分是问题所在。由于某种原因,我还有一个旧的测试目标的二进制文件。 - LJ Wilson
非常感谢!删除“libPods-OldTargetName.a”对我很有帮助。 - Алексей Алыбин

121

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

  1. 我设置了一个新项目
  2. 我安装了 CocoaPods
  3. 我创建了一个名为 Preview 的新配置,除了现有的 DebugRelease 配置外
  4. 现在在这个新的 Preview 配置上编译时,编译器将无法链接 Pods 并给出以下消息:

    ld: library not found for -lPods
    

解决方案:

我所需要做的是运行:

 pod install

再次配置CocoaPods以适应新的Preview配置。它更新了我的项目、工作区和Pod的项目文件,问题就消失了。


1
这也让我感到困惑。特别是在我创建配置后它仍然能够正常工作,只有当我清理派生数据后才出现了问题。 - Daniel Wood
请注意“发送统计数据”部分中显示的警告,这些警告会在“pod install --verbose”或“pod update --verbose”的输出中显示,例如:“The `yourApp [Debug]` target overrides the `HEADER_SEARCH_PATHS` build setting defined in ...”或“... target overrides the `OTHER_LDFLAGS` build setting ...”。 - jk7
在“每个配置的构建产品路径”中更改“预览”配置,然后执行“pod install”,pod不会保存我的值在pod项目中,有什么帮助吗? - liu pluto
啊!问题出现在创建新的扩展配置之后。前三步帮助我理解了这个问题。谢谢! - iHarshil

74

请确保打开的是.xcworkspace而不是.xcodeproj


这是我的问题。我是从常规的Xcode项目文件中打开项目的。一旦你开始使用CocoaPods,你需要从.xcworkspace文件而不是.xcodeproj文件开始打开你的项目。 - HotFudgeSunday
呵呵,我总是这样做 :) - yeahdixon
此此此此 - bryan
哦我的天啊,我想抱抱你。改了那么多本来不是问题的东西! - kjonsson

56

没有一个解决方案适用于我,这真的很难忍受,有一个文件libpods.a(标记为红色),我将其删除后一切正常工作!祝贺我 ;)


6
我也遇到了同样的问题。我重命名了目标,结果创建了这个有问题的.a文件。 - seenickcode
如果我这样做,那么我使用Cocoapods添加的库将不会被添加到项目中。 - Francisco Corrales Morales
1
你让我开心了 :D,有两个目标,我删除了其中一个,但它的 pods 仍然存在,构建失败了,只需删除该目标的 pods 引用即可解决。 - mohammad alabid
我也有过同样的经历。那是一个我已经好几年没碰过的旧项目,而且仍然使用着旧格式的 Podfile 等等文件。 - Lucas van Dongen

47

我有一个旧的libPod.a文件被指定使用(可能是因为我改变了目标导致的)。

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

通常,cocoapods只会包括一个库,如libPods-target.alibPods.a。我通过删除重复的解决了这个问题。


5
这对我很有用。我正在为测试目标(Tests和UITests)添加pod支持,基本配置从“Pods.debug”更改为“Pods-MyApp.debug”,因此现在我只需要libPods-MyApp.a(旧的libPods.a有一个“褪色”的图标)。 - Nicolas Miari
对我来说没有褪色的图标,但这是唯一有效的解决方案。 - Yogesh Maheshwari
一样的。谢谢。 - rmvz3
我改了项目名称,然后出现了错误。上述解决方案对我起作用了。 - guness

46

我已经根据不同的目标在Podfile中分别列出了我的Pod清单,例如:

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

解决方法:从Link Binary With LibrariesBuild Phases中移除库libPods.a


这是与 https://dev59.com/Imkw5IYBdhLWcg3wfKhA#23085107 和 https://dev59.com/Imkw5IYBdhLWcg3wfKhA#21694261 相同的修复。 - Hot Licks
2
解决方案是不同的。使用这个确切的解决方案,它为我修复了问题。 - cynistersix
移除库文件libPods.a,然后运行pod install即可为我解决问题。 - bisma
1
当出现 "ld: library not found for -lPods" 错误时,解决方法是导出 IPHONEOS_DEPLOYMENT_TARGET=9.0。 - jacksonfdam
更改目标名称后,对我有效。 - alsantos123
我移除了libPods.a和libPods-xxx.a。这个解决方案对我有效。 - ManuQiao

44

这就是我的全部,将 CP 添加到一个非常旧的项目之后。 - Josh Hudnall
和我一样 - 我给一个非常老的项目添加了CP,可以在模拟器上构建,但是一旦我切换到为设备构建,构建就失败了。那个答案帮了很多忙! - Florian

40

如果Xcode在链接时报错,例如-LPods找不到库,则说明它没有检测到隐式依赖项。

前往“Product > 编辑方案” 点击“Build” 添加Pods静态库,并确保它位于列表顶部 清理并再次构建 如果这样仍然无法解决问题,请验证您要包含的规范源是否已从github获取。在/Pods/中查看。如果它是空的(不应该是),请验证~/.cocoapods/master//.podspec中是否有正确的git hub网址。 如果仍无法解决问题,请检查XCode的构建位置设置。前往“偏好设置->位置->派生数据->高级”,将构建位置设置为“相对于工作区”。

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


3
第一部分解决了我的问题(Product > Edit Scheme,将Pods添加为第一项进行构建)。谢谢。 - William Power
我在xCode 6.3和CocoaPods 0.36.0中遇到了这个问题,以下方法解决了它。 谢谢! - ProgrammierTier
同Xcode 6.3和CocoaPods 0.37一样 -> 谢谢!!在处理目标设置时感到很疯狂,而问题是方案。只需添加Pods即可。 - altagir

36

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

Podfile

target 'xxxx' do

pod 'xyz'
pod 'abc'    

end

在四处寻找后,我发现在目标属性 >> 常规选项卡 >> 链接的框架和库部分,有新的 libPods-xxxx.a 和旧的 libPods.a。

我只删除了 libPods.a,一切都正常工作了。


这也是我的问题。我认为问题的根源在于我在开发过程中升级了CocoaPods和Podfile的格式。 - gklka
2
在添加 pod 的目标后,我遇到了完全相同的情况。+1 点赞准确性。 - Adriano Spadoni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接