基础框架中单个方法的符号可以未定义吗?

Posted

技术标签:

【中文标题】基础框架中单个方法的符号可以未定义吗?【英文标题】:Can symbols for a single method in foundation framework be undefined? 【发布时间】:2014-08-29 13:45:42 【问题描述】:

在我用 Swift(OS X Mavericks 上的 Xcode 6 Beta 6)编写的 Cocoa 应用程序中,我想使用捆绑资源。 Is 不使用任何外部库,而仅使用 WebKit.framework。我在编写的代码中遇到了一个奇怪的链接器问题,可以将其减少到此 sn-p 中的第二行:

var bundle = NSBundle.mainBundle()

// Leads to linker error!
var path = bundle.pathForResource(resource, ofType: "js")

如果我注释掉 pathForResource 行,它会编译并运行良好。否则会导致构建失败。这是 Xcode 显示错误的输出:

Ld /Users/Peter/Library/Developer/Xcode/DerivedData/OFrame-cyxuoheofsrztibvnaxacjxvlzsl/Build/Products/Debug/OFrame.app/Contents/MacOS/OFrame normal x86_64
    cd /Users/Peter/Projekte/OFrame
    export MACOSX_DEPLOYMENT_TARGET=10.9
    /Applications/Xcode6-Beta6.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch x86_64 -isysroot /Applications/Xcode6-Beta6.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -L/Users/Peter/Library/Developer/Xcode/DerivedData/OFrame-cyxuoheofsrztibvnaxacjxvlzsl/Build/Products/Debug -F/Users/Peter/Library/Developer/Xcode/DerivedData/OFrame-cyxuoheofsrztibvnaxacjxvlzsl/Build/Products/Debug -filelist /Users/Peter/Library/Developer/Xcode/DerivedData/OFrame-cyxuoheofsrztibvnaxacjxvlzsl/Build/Intermediates/OFrame.build/Debug/OFrame.build/Objects-normal/x86_64/OFrame.LinkFileList -Xlinker -rpath -Xlinker @executable_path/../Frameworks -mmacosx-version-min=10.9 -lswiftCore -L/Applications/Xcode6-Beta6.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx -Xlinker -force_load -Xlinker /Applications/Xcode6-Beta6.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_macosx.a -Xlinker -add_ast_path -Xlinker /Users/Peter/Library/Developer/Xcode/DerivedData/OFrame-cyxuoheofsrztibvnaxacjxvlzsl/Build/Intermediates/OFrame.build/Debug/OFrame.build/Objects-normal/x86_64/OFrame.swiftmodule -framework WebKit -Xlinker -dependency_info -Xlinker /Users/Peter/Library/Developer/Xcode/DerivedData/OFrame-cyxuoheofsrztibvnaxacjxvlzsl/Build/Intermediates/OFrame.build/Debug/OFrame.build/Objects-normal/x86_64/OFrame_dependency_info.dat -o /Users/Peter/Library/Developer/Xcode/DerivedData/OFrame-cyxuoheofsrztibvnaxacjxvlzsl/Build/Products/Debug/OFrame.app/Contents/MacOS/OFrame    

Undefined symbols for architecture x86_64:
  "__TFSs26_forceBridgeFromObjectiveCU__FTPSs9AnyObject_MQ__Q_", referenced from:
      __TFC6OFrame15FrameController16injectjavascriptfS0_FCSo8NSStringT_ in FrameController.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我阅读了有关框架的架构问题,但它们都与整个框架相关。不使用单一方法。这让我很困惑。更气人的是NSBundle.pathForResource是基础框架中的一个类方法。我最终需要清除的构建对象是否存在某种缓存?

我觉得被诅咒了。每当我尝试用 Xcode 做某事时,都会遇到最奇怪的问题。

【问题讨论】:

【参考方案1】:

在发布我的帖子后不久找到this related question 后,我发现使用 Xcode 6 Beta 5 进行编译是可行的。我也清除了派生数据文件夹的内容。现在它在 Xcode 6 Beta 6 中也可以正常编译。

【讨论】:

以上是关于基础框架中单个方法的符号可以未定义吗?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery基础—— 解决jQuery冲突

目标框架符号未定义

vue框架:框架简介,基础实例成员,基础指令,js对象方法补充

静态 Swift 框架未能通过 CocoaPods 验证,并显示“未定义的架构符号”

定时调度框架quartz可以定义单个触发器多个任务吗

前端开发JS框架之jQuery的基础知识分享