Xcode 6 linker error - Undefined symbols for architecture armv7

前端 未结 10 2077
粉色の甜心
粉色の甜心 2021-01-31 10:15

After upgrading to Xcode 6 beta 7 (and now still with Xcode 6 GM) I am unable to link my Swift app. I receive errors such as:

Undefined symbols for archit

10条回答
  •  不思量自难忘°
    2021-01-31 10:39

    What's happening here has nothing to do with your Derived Data location.

    When a swift application is built, it goes through several steps:

    • Write auxiliary files

    • Create product structure

    • Compile swift source for each architecture

    • Copy resource rules plist

    • Copy application bridging header

    • Link against swift runtime libraries for each architecture

    • Copy application swift module for each architecture

    • Create the application binary

    • Copy resources build phase

    • Copy the swift standard libraries into the application

    • Package it up

    • Sign it

    Whew! That's a lot. Your build is failing when linking against the swift runtime libraries. They live in Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos inside the Xcode developer directory. Specifically, the library that is not being correctly linked is libswiftCore.dylib. If you use nm on that library, you can see it defines your first missing symbol:

    quellish% nm /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/libswiftCore.dylib | grep compareNSStringDeterministicUnicodeCollation
    00197c8c T _swift_stdlib_compareNSStringDeterministicUnicodeCollation
    000000000018352c T _swift_stdlib_compareNSStringDeterministicUnicodeCollation
    

    You can also use lipo to see what architectures are in the file:

    quellish% xcrun lipo -info /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/libswiftCore.dylib
    Architectures in the fat file: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/libswiftCore.dylib are: armv7 arm64
    

    It contains armv7 and arm64. It's not the library architecture that's the problem.

    Linking against the swift standard library is not working. It's possible that source control or migrating Xcode versions has caused your project file to drop part of the linking step, or it's simply not able to find the libraries it needs to link against. Xcode project files are complex and use a lot of references - it's possible that a merge, etc. caused a critical reference to be come dissociated from the linking step. Without a full build log and a look at your machine it may not be possible to tell.

    This library, as you might guess, has nothing to do with the project's derived data location.

    The best way to move forward would unfortunately be to recreate the project file. Comparing the build log of the broken project to a swift project that does build correctly may provide some insights, but it may also be a waste of time - something fixable may be the problem, but more likely not.

    I would encourage you to file a bug and include the troublesome project file with it.

提交回复
热议问题