我在使用Xcode 6 beta 6构建Swift程序时,从链接器收到错误消息,目标是iOS 8.此代码已经编译并正常运行于beta 5。
Undefined symbol for architecture x86_64:
__TFSs26_forceBridgeFromObjectiveCU__FTPSs9AnyObject_MQ__Q_", referenced from:
__TFC8RayTrace14RayTracingPlot15drawFocalPointfS0_FT_T_ in RayTracingPlot.o
ld: symbol(s) not found for architecture x86_64
以下是有问题的代码:
private func drawFocalPoint() {
var attributes = Dictionary<String, AnyObject>()
let FString: String = "F"
let distance: CGFloat = focalDistance
let centerX = CGRectGetMidX(bounds)
let centerY = CGRectGetMidY(bounds)
let circleRadius: CGFloat = 4.0
let focalPointFrame = CGRectMake(0, 0, circleRadius * 2.0, circleRadius * 2.0)
var path = UIBezierPath(ovalInRect: focalPointFrame)
let color = UIColor.blackColor()
let currentContext = UIGraphicsGetCurrentContext()
CGContextSaveGState(currentContext)
let shadowColor = UIColor(white:0, alpha:0.75).CGColor
CGContextSetShadowWithColor(currentContext, CGSizeMake(0, 4), CGFloat(8), shadowColor)
// Image F
var imageFPath = UIBezierPath(CGPath: path.CGPath)
let imageFTransform = CGAffineTransformMakeTranslation((centerX - distance - circleRadius),
(centerY - circleRadius))
imageFPath.applyTransform(imageFTransform)
color.set()
imageFPath.fill()
FString.drawAtPoint(CGPointMake(centerX - distance - circleRadius, centerY + 5), withAttributes:attributes)
CGContextSetShadowWithColor(currentContext, CGSizeMake(0.0, 0.0), CGFloat(0.0), nil) // Clear shadow
CGContextRestoreGState(currentContext)
}
我很欣赏有关此代码中查找错误的位置的提示,以便我可以修复它。谢谢。
答案 0 :(得分:120)
即使使用了新版本的Beta6,我也遇到了这个错误,该版本是在坏版本被拉出后的几个小时内发布的。
我通过删除Derived文件夹的内容解决了这个和其他类似的难以辨认的错误。您可以转到首选项&gt;找到该文件夹的位置。位置。
默认路径是: / Users / [您的用户名] / Library / Developer / Xcode / DerivedData
您可以在Xcode中打开“产品”菜单时按住Option
,这会将Clean
更改为Clean Build Folder
...并完成相同的任务,而无需进行文件夹搜索。
答案 1 :(得分:7)
此错误的另一个原因(在Xcode 6.1.1和Xcode 6.2 Beta 3中看到)有一个枚举,在一个类中只有一个case,并在第二个类中声明该类型的变量。
此代码将导致链接器错误:
class ClassA {
enum ExampleEnum {
case Option1
}
}
class ClassB {
var example: ClassA.ExampleEnum = .Option1
}
这将解决它。
class ClassA {
enum ExampleEnum {
case Option1
case Option2 // Added a second case
}
}
class ClassB {
var example: ClassA.ExampleEnum = .Option1
}
Radar获取更多信息和示例项目:http://openradar.appspot.com/19369147
只有一个案例的枚举在实践中相当无用,因此编译器可能正在优化它或其他东西。我在设置一个新项目时使用enum来确定以后确定的成就,并且只有一个占位符。
另请注意:使用Watchdog http://watchdogforxcode.com/可以避免担心派生数据问题。
答案 2 :(得分:1)
对于可能偶然发现此错误的其他人。我在实施CocoaPods
时没有将此目标Other Linker Flags
设置为$(inherited)