【问题标题】:Error when compiling a static library using Swift "unknown option character `X' in: -Xlinker" [duplicate]使用 Swift 编译静态库时出错“未知选项字符‘X’ in:-Xlinker”[重复]
【发布时间】:2014-07-24 03:10:36
【问题描述】:

在将要编译的 swift 文件添加到静态库中时看到此错误。使用 XCode 6.0 (6A215l)

完整的 libtool 错误: Libtool DerivedData/SwiftTest/Build/Products/Debug-iphonesimulator/libstatic.a normal i386 cd /Users/al/dev/ios/SwiftTest2 export IPHONEOS_DEPLOYMENT_TARGET=8.0 export PATH="/Applications/Xcode6-Beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode6-Beta.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool -static -arch_only i386 -syslibroot /Applications/Xcode6-Beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk -L/Users/al/dev/ios/SwiftTest2/DerivedData/SwiftTest/Build/Products/Debug-iphonesimulator -filelist /Users/al/dev/ios/SwiftTest2/DerivedData/SwiftTest/Build/Intermediates/SwiftTest.build/Debug-iphonesimulator/static.build/Objects-normal/i386/static.LinkFileList -ObjC -L/Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphonesimulator -Xlinker -rpath -Xlinker /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphonesimulator -Xlinker -force_load -Xlinker /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a -Xlinker -sectalign -Xlinker __SWIFT -Xlinker __ast -Xlinker 4 -Xlinker -sectcreate -Xlinker __SWIFT -Xlinker __ast -Xlinker /Users/al/dev/ios/SwiftTest2/DerivedData/SwiftTest/Build/Intermediates/SwiftTest.build/Debug-iphonesimulator/static.build/Objects-normal/i386/static.swiftmodule -o /Users/al/dev/ios/SwiftTest2/DerivedData/SwiftTest/Build/Products/Debug-iphonesimulator/libstatic.a

我在这里创建了一个示例项目,错误发生在一个全新的项目中:https://github.com/amleszk/SwiftTest/tree/cd94ca21d817fed336b1a3bfc774a13608e0d1ca

重现签出项目并构建 SwiftTest 目标,该目标依赖于静态库。任何帮助表示赞赏

【问题讨论】:

  • 在您的问题中显示完整的构建行。
  • 那不是 Obj C 中的代码吗?我在那里没有看到任何快速代码。我错过了吗?
  • 这个运气好吗?我尝试了同样的事情:创建一个静态库并开始用 Swift 编写,但我得到了同样的错误

标签: ios swift ios8


【解决方案1】:

更新: Xcode 6 的官方版本似乎仍然存在同样的问题。

来自 xcode 6 beta 2 发行说明:

在此版本中无法构建包含 Swift 代码的静态库

【讨论】:

  • 我在使用 Xcode6-beta6 时也遇到了这个错误。这事有进一步更新吗?谢谢。
  • 在预发布的 Xcode6 中仍然出现此错误
  • 使用 Xcode 6.1 Beta 和 Xcode 6.0.1 GM 仍然可以得到这个
  • 同样的问题。请注意,单元测试构建良好,只是静态库本身没有。我将尝试使用 Swift 框架,看看效果如何。
  • @femot 你能更新你的答案,包括它在 Xcode 6 的官方版本中也不起作用
【解决方案2】:

我找到了解决方案。这是钩子,但它有效。 您应该以 root 身份执行此操作。

  1. 转到默认的工具链 bin 目录

    cd $(xcode-select -p)/Toolchains/XcodeDefault.xctoolchain/usr/bin

  2. 将当前的 libtool 重命名为 old_libtool

    mv libtool old_libtool

  3. 创建新的库工具

    touch libtool && chmod +x libtool

  4. 插入当前脚本作为新 libtool 的内容

    #!/usr/bin/python
    import os
    import subprocess
    import sys
    args=[]
    for arg in sys.argv[1:]:
        if arg != '-Xlinker' and arg != '-add_ast_path' and not arg.endswith('swiftmodule'):
            args.append(arg)
    args.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), 'old_libtool'))
    subprocess.check_call(args)
    
  5. 编译。

【讨论】:

  • 您能否更详细地解释为什么必须这样做以及脚本的作用?
  • 这对我不起作用。我应该做出一些不同的事情,因为这个答案很旧吗?
猜你喜欢
  • 1970-01-01
  • 2014-09-24
  • 2013-11-10
  • 1970-01-01
  • 2016-12-26
  • 1970-01-01
  • 1970-01-01
  • 2016-09-21
  • 1970-01-01
相关资源
最近更新 更多