是啥导致了这个 Crashlytics 编译警告? (自动链接在“...”处提供的“...”框架链接器选项不是 dylib)

Posted

技术标签:

【中文标题】是啥导致了这个 Crashlytics 编译警告? (自动链接在“...”处提供的“...”框架链接器选项不是 dylib)【英文标题】:What is causing this Crashlytics compile warning? (Auto-Linking supplied '...' framework linker option at '...' is not a dylib)是什么导致了这个 Crashlytics 编译警告? (自动链接在“...”处提供的“...”框架链接器选项不是 dylib) 【发布时间】:2015-05-23 00:44:22 【问题描述】:

编译我的主要目标(不是像here 这样的测试目标)会产生这个错误:

ld: warning: Auto-Linking supplied 
   '~/Documents/my_app/MyApp/Crashlytics.framework/Crashlytics', 
framework linker option at 
    ~/Documents/my_app/MyApp/Crashlytics.framework/Crashlytics 
is not a dylib

从此构建命令:

ld /Build/Products/Debug-iphonesimulator/MyApp.app/MyApp 正常 i386 cd ~/Documents/my_app/MyApp 导出 IPHONEOS_DEPLOYMENT_TARGET=8.0 导出 PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin: /usr/sbin:/sbin" /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8。 2.sdk -L~/Library/Developer/Xcode/DerivedData/MyApp-dbmrsjmskpqxmnegayfzfxgcwvsm/Build/Products/Debug-iphonesimulator -F~/Library/Developer/Xcode/DerivedData/MyApp-dbmrsjmskpqxmnegayfzfxgcwvsm/Build/Products/Debug-iphonesimulator - F~/Documents/my_app/MyApp -filelist ~/Library/Developer/Xcode/DerivedData/MyApp-dbmrsjmskpqxmnegayfzfxgcwvsm/Build/Intermediates/MyApp.build/Debug-iphonesimulator/MyApp.build/Objects-normal/i386/MyApp.LinkFileList - Xlinker -rpath -Xlinker @executable_path/Frameworks -Xlinker -objc_abi_version -Xlinker 2 -ObjC -lPods-CocoaLumberjack -lPods-Mantle -framework CFNetwork -framework Foundation -framework Security -framework SystemConfiguration -fobjc-arc -fobjc-link-runtime -Xlinker -no_implicit_dylibs -mios-simulator-version-min=8.0 -framework CoreGraphics -lPods -framework MapKit -framework Fabric -lPods-MyApp -Xlinker -dependency_info -Xlinker ~/Library/Developer/Xcode/DerivedData/MyApp-dbmrsjmskpqxmnegayfzfxgcwvsm/Build/Intermediates/MyApp.build/Debug-iphonesimulator/MyApp.build/Objects -normal/i386/MyApp_dependency_info.dat -o ~/Library/Developer/Xcode/DerivedData/MyApp-dbmrsjmskpqxmnegayfzfxgcwvsm/Build/Products/Debug-iphonesimulator/MyApp.app/MyApp

【问题讨论】:

【参考方案1】:

缺失的环节:

这个错误几乎总是由没有链接到库的二进制文件产生的(在这种情况下它将是Crashlytics.framework):

尝试构建目标MyApp(包括带有#import <Crashlytics/Crashlytics.h> 的标头将产生错误:

ld:警告:提供了自动链接 '../../Crashlytics.framework/Crashlytics',框架链接器选项位于 ../../Crashlytics.framework/Crashlytics 不是 dylib

链接框架:

幸运的是,只需将项目导航器中的Frameworks 文件夹中的Crashlytics.framework 拖到Link Binary With Libraries 列表中,或者使用+,就可以轻松解决问题。

在执行此过程时,请确保在 Targets 下选择/突出显示您的应用。

【讨论】:

现在,Fabric.framework 也需要以同样的方式链接。 你完全节省了我浪费的时间! 嘿,我最近遇到了完全相同的问题。我使用来自 Google 的 GGLSignIn 获得了它,而我的单元测试给我带来了麻烦。所以,是的,解决方案是相同的,但目标是 MyAppTests,所以请记住这一点! 是的,这就是我的解决方案。 (Fabric 由我的另一个上游框架链接,并包含在最终的二进制文件中,但编译器坚持自动链接它,并告诉我。) 这为我修复了它,但在我的情况下,错误消息非常具有误导性:警告中命名的库不是我必须添加的库!我也遇到了未定义的符号错误,而定义这些符号的库是正确的。【参考方案2】:

我遇到了同样的问题。也许我搞砸了最初的结构安装,但是一旦我将 Fabric.framework 添加到框架列表中(默认情况下应该在应用程序的根文件夹中),一切正常。

【讨论】:

【参考方案3】:

为了将来参考,如果您将测试文件链接到应用目标,也会发生这种情况。

例如: https://github.com/realm/realm-cocoa/issues/1661

【讨论】:

【参考方案4】:

与 I'L'I 和 user3517250 提到的相反,问题可能还在于您有不应该存在的 #import 语句。

Xcode 确实从 #import 语句中推断出要链接的框架。如果您导入未链接的框架,则会收到此警告。

【讨论】:

【参考方案5】:

我有同样的问题,但原因不同。

错误输出

ld:警告:自动链接提供了“~/GameFolder/Pods/Fabric/tvOS/Fabric.framework/Fabric”,~/GameFolder/Pods/Fabric/tvOS/Fabric.framework/Fabric 中的框架链接器选项不是一个动态库 架构 x86_64 的未定义符号: “_OBJC_CLASS_$_Answers”,引用自: GameScene.o 中 __ObjC.Answers 的类型元数据访问器 AppDelegate.o 中 __ObjC.Answers 的类型元数据访问器 “_OBJC_CLASS_$_Crashlytics”,引用自: AppDelegate.o 中 __ObjC.Crashlytics 的类型元数据访问器 “_OBJC_CLASS_$_Fabric”,引用自: AppDelegate.o 中 __ObjC.Fabric 的类型元数据访问器 ld:未找到架构 x86_64 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

原因

我的目标是覆盖OTHER_LDFLAGS

解决方案

OTHER_LDFLAGS 更改为仅继承链接器标志。基本上,改成$(inherited)

【讨论】:

是的,这解决了我的问题。谢谢 确实。 PS:我用的是cocoapods。 很高兴这对您有所帮助。 +1。几个月来我一直有 Cocoapods 问题。甚至认为我搞砸了其他一些配置,甚至完全擦除和恢复了我的 Mac。这解决了我所有的问题,我可以再次有效地使用 cocoapods!谢谢! 这是我从 Carthage 切换到 Cocoapods 后遇到的问题【参考方案6】:

我按照@i'L'i 提供的所有步骤操作,但在构建阶段找不到Crashlytics.frameworkFabric.framework 文件。

所以这对我有帮助。

第 1 步:按照Here. 给出的所有步骤进行操作

第 2 步:现在,当您无法在 Link Binary With Libraries 中找到 Crashlytics.frameworkFabric.framework 文件时,请点击 + 进行以下操作。

2.1:点击Link Binary With Libraries中的+按钮。2.2:点击Add Other...按钮。2.3: 现在从Pod 文件夹中选择Crashlytic.frameworkFabric.framework - 如果使用cocoapods,则从您下载的位置选择这两个文件。

第 3 步: 构建成功,尽情享受。 :)

【讨论】:

以上是关于是啥导致了这个 Crashlytics 编译警告? (自动链接在“...”处提供的“...”框架链接器选项不是 dylib)的主要内容,如果未能解决你的问题,请参考以下文章

@SuppressWarnings是啥意思

是啥导致了错误:Kivy 中的“警告,在下一帧之前完成了太多迭代”?

是啥导致 cellForRowAtIndexPath 中的 outOfBounds 错误?

SMS_SEND 权限导致编译错误并警告防病毒

是啥导致了这个 QT 4.7.3 错误?

“警告 C4987:使用了非标准扩展:'throw (...)'”是啥意思?