错误:使用CocoaPods时找不到-lPods库

33

我使用CocoaPods安装了DTCoreText(https://github.com/Cocoanetics/DTCoreText),但每次尝试运行模拟器或设备时都会出现错误!

ld: warning: directory not found for option '-L/Users/example/Desktop/ios/Pods/build/Release-iphoneos'
ld: warning: directory not found for option '-L/Users/example/Desktop/ios/Pods/build/Debug-iphoneos'
ld: library not found for -lPods-example
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

在我的“链接二进制文件库”中,“libPods”部分是红色的:

图片描述

这里是我的构建设置:

项目的设置:

图片描述

Pods的设置:

图片描述

编辑:

我不确定问题出在哪里,但是当我删除所有DTCoreText和Cocoapods的内容并重新安装时,问题就解决了!


你解决了这个问题吗?谢谢。 - Deniz
Pods清单锁定部分是一个脚本。它不是一个错误。 - John Stack
你解决了吗?我可以在模拟器上构建,但无法在设备上构建。 - laucel
13个回答

50

建议尝试以下方法,这对我有效:

a) 从目标设置视图中的“库”中搜索并双击查看Library Search Paths的值。

b) 列出了两个值:$(inherited)$(PROJECT_DIR)/Pods/build/Debug-iphoneos。删除后者。

c) 进行完全清理、构建和运行。

d) 再次运行pod install。注意该条目未被恢复。


你的答案完美地解决了问题!为什么这个方法可行,$(PROJECT_DIR)/Pods/build/Debug-iphoneos 又是从哪里来的呢? - preynolds
1
我的怀疑是,当你执行 pod install 命令时,安装脚本期望某种状态(如果该状态不存在,则无法有效处理)。我不确定 $(PROJECT_DIR)/Pods/build/Debug-iphoneos 最初来自哪里,但删除它并运行干净的安装似乎可以恢复预期的状态,并允许设置完成适当的操作。(请注意,这只是推测)。 - gemmakbarlow
看起来很合理。我想这已经是我第二次遇到这个错误了,所以我想确保我没有误解什么基本的东西。非常感谢您的见解! - preynolds
我认为这应该向Cocoapods团队报告。这肯定是一个错误,因为这个奇怪的路径“build/Debug-iphoneos”很容易被追踪到。 - Paweł Brewczynski
保罗说得很好 - 我原以为这是一个已知的问题,但由于这个问题不断地得到+1的支持,可能值得向Cocoapods的开发人员提出。我现在会在他们的Github上开一个issue。 - gemmakbarlow

37

还有这个可以帮助:

  1. 在您的主项目(不是Pods)中选择主要目标
  2. 进入 Build Phases 选项卡
  3. 进入 Link Binary with Libraries
  4. 删除导致问题的库(它可能会以红色显示)

1
在无数的解决方案中,这绝对是最简单的一个。对我很有帮助。谢谢。 - Christian Dechery

29

请确保您打开的是 .xcworkspace 文件,而不是 .xcodeproj 文件


我的问题确切是什么。 - Rubberduck
非常感谢。我刚开始学习iOS开发。 - pradyot1996

27

在我的链接二进制文件中,我同时拥有 libPods.alibPods-MyProj.a。我之前更新了 Podfile 来拥有两个独立的目标(为了用桥接编译 Swift 测试),这意味着我必须手动删除旧的 libPods.a 依赖。


你怎么做这件事?我已经从“Linked Binary Libraries”中删除了所有类型为“libPods-*”的内容,但仍然遇到相同的问题。我在这里开了一个新的线程:http://stackoverflow.com/questions/31921701/ios-duplicate-symbols-for-architecture-armv7 - meteors
是的!这也是我的问题;我正在编写一个带有应用程序扩展的应用程序,该扩展不允许在我使用的一些Pod中使用某些代码,因此我在Podfile中将其拆分为两个目标。没有意识到虽然它添加了链接到我的两个新目标,但项目中的BOTH目标仍然尝试链接原始的统一Pods库。非常感谢您的答案! - DanM
我想把这个顶上去。一开始没有为每个目标定义pods,后来由于测试不得不这样做,所以有了两个目标,其中一个不再使用,因此删除libPods.a以解决此问题。 - Alex Trott
这是一个非常常见的问题,也是正确的解决方案。可能会出现在您的项目有多个目标的情况下,但仅有一个具有 pod 依赖项的情况下。当 pod 文件更新时也可能会发生。 - alcamla

8
我发现我的其他链接器标志(Other Linker Flags)构建设置中缺少$(inherited)。应用此选项后,解决了我遇到的一个丢失库的问题。

请问您能提供更多细节吗?我应该在哪里添加这个? - Nuno Gonçalves
1
@NunoGonçalves 在 Xcode 中,点击您的项目文件,您将看到右侧列出的项目目标。单击 项目目标,然后在构建设置下搜索设置 其他链接器标志,您应该已经在那里看到它了。请查看此链接 link - John Dunne

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

3
通常作为默认选择。 - John Stack
在同一位置,Pods 必须位于列表的顶部。 - brainray

4
在目标的“构建设置”页面中查找“库搜索路径”。将Debug文件夹的名称从Debug-iphoneos更改为Debug-iphonesimulator。请注意,保留HTML标记。

3

确保缺失的pods库实际上已经被构建。为此,请打开Build Scheme。

产品 > 方案 > 编辑方案... > 构建

添加Pods目标,并将其放在抱怨该库缺失的目标之前(在我的情况下,这是UI测试-我为此挣扎了几个小时...)


2

2
对我来说,错误是:Pods目标不包含i386所需的架构切片。因此,我点击了Pods项目-->Pods-ProjectName目标,在Build Settings中将仅构建活动架构设置为NO,同时适用于DebugRelease。这可以确保同时构建模拟器和设备切片。模拟器使用i386架构,实际设备使用x86-64。因此,如果您想在模拟器和侧向加载到设备上运行,则必须确保所有相关项目的所有依赖目标都在同时构建这两种架构。

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