将应用程序放入AdMob后,出现错误“找不到库”


150

将我的应用程序放入AdMob后出现错误。该应用程序一直运行到今天。错误如下:

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

我怎样才能解决这个问题?谢谢。




有时:拔下设备的电源,然后首先构建项目。它将生成库,然后您就可以在设备中运行。
TheTiger

Answers:


114

有时,您只是删除库的引用,然后再次添加引用。

除了重新从头开始添加Google Mobile Ads SDK和其他库之外,建议您检查“ 库搜索路径”。在某些情况下,当您复制或复制目标时,Xcode决定它需要使用“ \”对任何双引号进行转义。请确保删除所有\,它应该看起来像这样-

在此处输入图片说明

通过为路径添加多个'\'前缀,我能够复制该错误。


好一个,在pod安装之后,其中一个库未列出。我不知道为什么,但是添加该库路径可以使其正常工作。
Warewolf

好了,这解决了我的问题“ -lART找不到库”,这真是令人难以置信!谢谢 !
ZedTuX

也考虑“标题搜索路径”。
Luat Vu Dinh

@raurora如何访问图书馆搜索路径?
Massimo Frittelli

1
@MassimoFrittelli项目>构建设置选项卡>搜索路径。您也可以输入搜索选项。
raurora

315

我遇到了类似的“找不到库”问题。但这是因为我不小心使用了.xcodeproj文件而不是.xcworkspace文件。


4
有人可以解释一下.xcodeproj和.xcworkspace的目的吗?
EFreak

11
这样的事情让我喜欢Javascript生态系统
Mark

我该如何改变呢?
Brayan Loayza,

8
xcworkspace是使用Cocoapods的时候。这不是Xcode的问题,而是用户。
Azam

1
.xcworkspace是您的解决方案中包含多个“项目”的情况。例如,您可以具有外部库(cocoapods)或在许多项目中使用的自己的库。
丹尼尔·本尼迪克


66

如果与可可脚类有关的错误如下:

library not found for -lPod-...

您需要检查其他链接器标志并将其从那里删除。

额外信息:如果您有使用可可足类的旧项目。最近,您需要添加use_frameworks!到您的podfile。cocoapods不会再将这些库添加到您的“其他链接器标志”中,从而导致其继承。因此,在使用use_frameworks之前,您可能需要从添加的其他链接器标记中手动删除这些标记!


1
我在这里有很多标志,应该删除Pod的全部还是仅删除一个?
Mayur Deshmukh

如果这些标志引起问题。如果您仍要使用它,则应删除它们或保留它们并添加该库。
哈桑

1
我想当您尝试手动删除可可豆荚添加的库时,会发生这种情况。正确的方法是从Podfile中删除该库。然后再次运行pod install
hasan

1
谢谢!!这对我来说是一个线索:)。在我的情况下,重复的目标将每个-l“框架”划分为两行“ -l”和“框架”!
伊娃·马达佐

1
@IanSteffy将其结合起来
Eva Madrazo

57

就我的情况而言,Xcode 7也可以在Xcode 9.1中使用

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

设置Build Active architecture OnlyYes

在此处输入图片说明


2
当我们需要为App Store创建生产版本时该怎么办?我的意思是生产构建应该没有。
Jabbar

同意不应该用于生产
Ted

2
这不会对生产版本安装产生影响吗?
Jabbar

1
为我工作,而在9.2的XCode和iOS整合11 Pinterest的SDK
Aakash AGGARWAL

21

如果您使用的是椰子,则会发生这种情况,请使用.xcworkspace文件而不是默认.xcodeproj文件。


15

如果错误如下

ld:找不到用于-lpods的库

我发现在项目的“框架”组中以某种方式创建了红色文件“ libPods.a”(就像丢失的文件一样)。我只是简单地删除了该文件,一切都很好。

编辑:另一个解决方案

我已经在类似问题中回答的另一个解决方案在此链接中


12

转到构建阶段->使用库链接二进制文件并删除显示错误的库,因为该库在项目文件夹中不可用


这解决了我的特殊问题。我有两个相似的命名库,一个命名libPods-Foo BarTests.a,另一个命名libPods-FooBarTests.a
edenwaith

9

如果您打开项目文件而不是工作区,也会发生这种情况。我自己这样浪费了一天。


1
太好了,我也在关闭工作区的同时进行了pod更新,然后在pod更新完成后将其打开
Badr

5

答案很晚,但是这里是我尝试过的事情的清单,所以如果有人想解决这个问题,它将放在一个地方。

  1. 有效架构= armv7 armv7s
  2. 仅构建活动架构=否
  3. 目标->构建设置->其他链接器标志= $(继承)
  4. 目标->构建设置->库搜索路径= $(继承)
  5. 产品清洁
  6. 终端中的Pod更新

2

就我而言,有一个命名问题。我的库被调用了ios-admob-mm-adapter.a,但是Xcode期望的是,该名称应以前缀lib开头。我刚刚将我的lib重命名为libios-admob-mm-adapter.a并解决了该问题。

我使用Cocoapods,它在目标的构建设置中将库与其他链接器标志选项链接在一起。旗帜看起来像-l"ios-admob-mm-adapter"

希望对别人有帮助



2

对于我来说,会发生此问题,因为我为IOS安装了材料库。解决这个问题

1:转到目标应用程序的“ 构建设置”

2:搜索其他链接器标志

3:打开其他链接器标志,并检查错误中提到的库。

4:删除该标志。

5:清理并构建。

希望这能解决您的问题。


2

如果ld: library not found for -{LIBRARY_NAME}发生这种情况,是因为库文件不存在。

在应用程序目标的“构建阶段”“库搜索路径”选项卡上检查库路径。

库文件的路径必须符合实际路径,例如,如果您的文件位于项目根目录中,则必须将路径设置为 $(PROJECT_DIR)


1

我知道这有点旧,但是我遇到了类似的问题,并且运行“ pod update”为我解决了这个问题。我的图书馆错误是因为AFNetworking ...

如果您未在Pod文件中使用显式版本,请小心进行Pod更新。


1

这个错误很奇怪。

我在使用-ldAfnetworking时遇到此错误,并且仅将项目复制到其他路径并可以正常工作。



1

@raurora的答案为我指明了正确的方向。我在“ watchkitapp扩展/库”路径中包含了库。在这种情况下,库搜索路径需要使用'\'进行转义,但是链接器似乎不理解这一点。为了解决/解决该问题,我将库路径上移了一层,使其不再位于名称中包含空格的目录中。


1

我只是更新了pod文件“ pod update”,它开始正常地为我工作。


1

在我的项目中运行“ pod更新”解决了“找不到-lSTPopup库”错误的问题。

评论特雷弗·潘霍斯特(Trevor Panhorst)的答案:

“如果您没有在Pod文件中使用显式版本,请小心进行Pod更新。”




1

Static Library是由引起的编译时间错误Static Linker

ld: library not found for -l<Library_name>
  1. Library not found for当您未包含指向库的库路径时,会出现错误Library Search Paths

    ld表示Static Linker找不到库的位置。作为开发人员,您应该帮助链接器并指向Library Search Paths

    Build Settings -> Search Paths -> Library Search Paths 
  2. 如果您第一次.xcodeproj在Cocoapods支持下打开一个新项目(),也可能会遇到此错误,请运行pod update。要解决此问题,只需关闭该项目并打开创建的工作区即可(.xcworkspace


0

我在找不到类似的库错误。最终,这就是我能够解决的方式

  1. 在开始使用Xcode Archive之前,先用flutter构建iOS
  2. 将IOS部署目标更改为更高的目标iOS 11.2。早些时候,我遇到了类似8.0的问题,但出现了以上所有错误。
  3. 确保Xcode中的IOS部署目标在Project,Target和Pod中相同
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.