试图安装新的Google Analytics 3.0 Beta时遇到链接器错误。

56
我相信就在今天 Google 发布了他们的 iOS Analytics 框架的新版本 (版本 3.0)。当我按照说明尝试运行代码时,出现了以下错误:

未定义的符号(针对 armv7 架构):"_inflate",来自于:
在 libGoogleAnalyticsServices.a(NSData+zlib.o) 中的 l002
未定义的符号(针对 armv7 架构):"_deflate",来自于:
在 libGoogleAnalyticsServices.a(NSData+zlib.o) 中的 l001
引用 "inflateInit2",来自于:
在 libGoogleAnalyticsServices.a(NSData+zlib.o) 中的 l002
未定义的符号(针对 armv7 架构):"_deflateEnd",来自于:
在 libGoogleAnalyticsServices.a(NSData+zlib.o) 中的 l001
引用 "_OBJC_CLASS_$_ASIdentifierManager",来自于:
在 libGoogleAnalyticsServices.a(TAGAdvertiserId.o) 中的 objc-class-ref
在 libGoogleAnalyticsServices.a(TAGAdvertisingTrackingEnabledMacro.o) 中的 objc-class-ref
在 libGoogleAnalyticsServices.a(TAGMobileAdwordsUniqueIdMacro.o) 中的 objc-class-ref
未定义的符号(针对 armv7 架构):"_inflateEnd",来自于:
在 libGoogleAnalyticsServices.a(NSData+zlib.o) 中的 l002
引用 "_SCNetworkReachabilityCreateWithName",来自于:
在 libGoogleAnalyticsServices.a(GAIReachabilityChecker.o) 中的 l027
在 libGoogleAnalyticsServices.a(TAGNetReachability.o) 中的 l002
引用 "_SCNetworkReachabilitySetCallback",来自于:
在 libGoogleAnalyticsServices.a(GAIReachabilityChecker.o) 中的 l027
在 libGoogleAnalyticsServices.a(TAGNetReachability.o) 中的 l002
在 libGoogleAnalyticsServices.a(TAGNetReachability.o) 中的 l003
引用 "deflateInit2",来自于:
在 libGoogleAnalyticsServices.a(NSData+zlib.o) 中的 l001
引用 "_SCNetworkReachabilityScheduleWithRunLoop",来自于:
在 libGoogleAnalyticsServices.a(GAIReachabilityChecker.o) 中的 l027
在 libGoogleAnalyticsServices.a(TAGNetReachability.o) 中的 l002
引用 "_SCNetworkReachabilityUnscheduleFromRunLoop",来自于:
在 libGoogleAnalyticsServices.a(GAIReachabilityChecker.o) 中的 l027
在 libGoogleAnalyticsServices.a(TAGNetReachability.o) 中的 l003

ld: 对于架构 armv7,未找到符号。clang: 错误:链接器命令失败,退出码为 1(使用 -v 查看调用)。

可能他们忘记了包含我需要添加的库?(指令的其他方面也有遗漏需要更改)。否则,我完全按照他们的指示进行操作,但仍然无法获得所需的结果。

6个回答

147
我不得不将libz.dylibAdSupport.framework都添加到构建阶段才能解决这个问题。Google在其指南中没有包含它们,因此我会与他们确认是否可以这样做,然后更新这篇文章。
更新:现在你还需要添加libsqlite3.0.dylib才能使其正常工作。

12
谷歌现在在他们的入门指南中列出了libz.dylib,但是AdSupport.framework仍然没有列出。 - Steph Sharp
@StephSharp - 是的,我在Google论坛上问了那个人,但我不认为他真正承认了它。啊好吧,我只知道当你包含AdSupport.framework时它可以工作。 - Ser Pounce
4
太遗憾了,你无法在不使用广告框架的情况下安装分析工具。谢谢提醒。 - jki
非常感谢,真的解决了我的问题。在更新 AdMob 库时由于新的 API 策略(UDID)而头痛了两个小时,这让我非常开心。 - pedrouan
2
四个月过去了,Google仍然无动于衷,不愿意在他们的安装说明中添加一行(关键)代码。哎? - Adam
显示剩余5条评论

24

我在2014年4月初下载了Google Analytics Services for iOS的3.06版本,仍然遇到上述问题。Google已更新其文档以提及需要链接libz.dylib和AdSupport.framework。

解决方法:通过试错,我发现还需要链接libsqlite3.dylib才能在模拟器或设备上进行构建。


在一个项目中,我可以在不进行此操作的情况下构建。在另一个项目中,我必须这样做才能使其编译。 - spybart
这是唯一对我有效的解决方案,谢谢。如果有任何影响,我也在使用HockeyApp SDK。我已经添加了libz.dylib和AdSupport.framework,但没有帮助。不过,添加libsqlite3.dylib就解决了问题! - John Contarino

22

添加

libz.dylib

AdSupport.framework

libsqlite3.0.dylib

截至2013年10月8日,Google没有更新他们的指南。

Google Analytics 指南在这里


1
不允许使用链接作为答案,请提供翻译后的文本。 - Max
1
添加了上述所需的库,但仍然收到6个链接错误。有任何想法吗? - Robert J. Clegg
2
提高生产力的方法 @MaxMommersteeg - spybart
1
它运行正常!如果您没有发布这个,我可能会整晚都试图修复它。谢谢! - mexok
1
当我添加Google登录时,遇到了这个问题,需要在Xcode 7中添加libz.tbd。这是在添加了-ObjC链接器标志之后,该标志也没有记录在文档中... - jakecraige

10

以上的解决方案都对我没用。然而,确实管用的是添加这些:

libz.dylib

libsqlite3.0.dylib

libGoogleAnalyticsServices.a

libGoogleAnalyticsServices.a是Google Analytics for Mobile Apps iOS SDK v3下载文件中的一个文件。

希望这可以帮助你!


1
谢谢。在我下载了libGoogleAnalyticsServices.a之前,什么都没用。 - Sunnyside Productions

1

在第三方开发者没有启用BITCODE的旧库之前,如果您不打算为应用程序添加Apple Watch扩展,您可以在自己的项目中禁用位码。

enter image description here


1

根据Google的指示,我安装了libz.dylibAdSupport.framework,它们工作得很好。

然后,由于其他库的依赖性,我不得不在其他链接器标志中添加-all_load,然后谷歌分析开始出现链接器错误。

我必须添加libsqlite3.0.dylib框架才能使其正常工作。

因此,这与-all_load链接器标志有关。


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