我更新到Xcode 6.3,但现在我的项目(框架)将不再构建。这是一个纯粹的快速项目。我的所有文件都正确编译(选中“编译swift源文件”部分),但是我的测试得到了一个链接错误(myProjectTests.xctest):
Undefined symbols for architecture x86_64:
"__TWPSiSs10Comparable14MathEagleTests", referenced from:
__TFC14MathEagleTests11MatrixTests45testRandowWithDimensionsIntervalGeneratorInitfS0_FT_T_ in MatrixTests.o
__TFC14MathEagleTests11MatrixTests21testSubscriptRangeSetfS0_FT_T_ in MatrixTests.o
__TFC14MathEagleTests11MatrixTests35testSubscriptRowRangeColumnRangeSetfS0_FT_T_ in MatrixTests.o
__TFC14MathEagleTests11MatrixTests30testSubscriptRowRangeColumnSetfS0_FT_T_ in MatrixTests.o
__TFC14MathEagleTests11MatrixTests30testSubscriptRowColumnRangeSetfS0_FT_T_ in MatrixTests.o
__TFC14MathEagleTests11MatrixTests13testMatrixMapfS0_FT_T_ in MatrixTests.o
__TFC14MathEagleTests11MatrixTests24testMatrixMapPerformancefS0_FT_T_ in MatrixTests.o
...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
奇怪的是,Comparable是一个快速的内置协议,所以我认为它与我的代码没有任何关系? 所有引用都来自我的测试文件,因此它不是我的主要项目...
答案 0 :(得分:5)
始终执行干净的构建:
然后转到Window-> Projects,选择您的项目并删除派生数据。
然后再次编译。
答案 1 :(得分:1)
我在实施CocoaPods
时遇到此错误,而未将我的目标Other Linker Flags
设置为$(inherited)
答案 2 :(得分:1)
我终于找到了解决方法。我使用了几个这样的协议:
extension Int: Addable, Negatable, Substractable, Multiplicable, Dividable, Modulable, Powerable, SetCompliant, BasicMathValue, FullMathValue, MatrixCompatible {}
我认为该错误是由于这些协议中的一些使用Comparable协议,例如:
protocol FullMathValue: Equatable, Comparable, Addable, Negatable, Substractable, Multiplicable, Dividable, Powerable, SetCompliant, IntegerLiteralConvertible {}
当我将Comparable协议明确地添加到扩展时,一切正常:
extension Int: Comparable, Addable, Negatable, Substractable, Multiplicable, Dividable, Modulable, Powerable, SetCompliant, BasicMathValue, FullMathValue, MatrixCompatible {}
奇怪的是,错误只是由Int和UInt类型引起的,所以所有Int8,...和UInt8 ......也是如此。 Float和Double没有造成任何麻烦。
这是我需要报告的错误,还是有这种行为的解释?