是啥导致了这个 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
列表中,或者使用+
,就可以轻松解决问题。
【讨论】:
现在,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.framework
和Fabric.framework
文件。
所以这对我有帮助。
第 1 步:按照Here. 给出的所有步骤进行操作
第 2 步:现在,当您无法在 Link Binary With Libraries
中找到 Crashlytics.framework
和 Fabric.framework
文件时,请点击 +
进行以下操作。
2.1:点击Link Binary With Libraries
中的+
按钮。2.2:点击Add Other...
按钮。2.3: 现在从Pod
文件夹中选择Crashlytic.framework
和Fabric.framework
- 如果使用cocoapods,则从您下载的位置选择这两个文件。
第 3 步: 构建成功,尽情享受。 :)
【讨论】:
以上是关于是啥导致了这个 Crashlytics 编译警告? (自动链接在“...”处提供的“...”框架链接器选项不是 dylib)的主要内容,如果未能解决你的问题,请参考以下文章
是啥导致了错误:Kivy 中的“警告,在下一帧之前完成了太多迭代”?