【问题标题】:Xcode 7 compile error : "Command failed due to signal: Segmentation fault: 11"Xcode 7 编译错误:“由于信号而导致命令失败:分段错误:11”
【发布时间】:2015-12-15 05:17:06
【问题描述】:

昨天我安装了官方的 Xcode 7,当我试图打开我的一个 Swift 项目时,出现了一个警告,说新的 Xcode 版本想要更新我的 swift 代码(或类似的东西)。好的,我接受并在此之后出现"Command failed due to signal: Segmentation fault: 11" 编译错误(如果您想了解有关此的详细信息,我可以编写整个错误文本)。有人有同样的问题吗?

谢谢

已编辑

我重新安装了 Xcode 6.4,没问题,没有编译错误。

【问题讨论】:

  • 当你打开 Xcode 7 时,它会要求你更新项目以使用 Swift 2.0,这可能会破坏某些东西,错误日志是什么?
  • @MichaelWang 错误日志无法理解(相信我)。那么,我应该创建一个新项目吗?
  • 好的,你能不能恢复你的代码并尝试使用 Xcode 7 打开但不要将它转换为使用 Swift 2 来查看它是否可以编译?
  • @MichaelWang 我恢复了我的代码,但同样的错误。也许是 Xcode 7 的错误?
  • 您的项目中是否使用了任何第三方框架?如果是这样,您还需要重新导入针对相同 swift 版本编译的框架。

标签: swift compilation xcode7


【解决方案1】:

天哪,这是 Xcode 的一个了不起的错误。只是读这个。 http://blog.bellebethcooper.com/xcode-bug.html 这让我笑了。

变化看似很小,但实际上是这样的(在我的 API 客户端类中,我实际上从 API 获取 JSON 数据):

我改变了这个:

`let json = try? NSJSONSerialization.JSONObjectWithData(data, options: [])`

到这里:

`let json = try? NSJSONSerialization.JSONObjectWithData(data, options: []) as! [String: AnyObject]`

这是我经历过的最令人沮丧的调试经历之一 有,但我希望这篇文章可以帮助其他有同样情况的人 问题。如果你通过谷歌搜索到了这里你正在苦苦挣扎的错误 和这对你没有帮助,我很抱歉。我确切地知道什么 你正在经历。不要放弃!

【讨论】:

  • 我在处理 JSON 时遇到了这个问题,但它使用大量多级字典引用来引用数据,这对我来说是个问题。相同的代码也破坏了语法突出显示(通常是麻烦的迹象)。我在说(类似于):funcCall(data!["address"]!["street_address"] as String, data!["address"]!["locality"] as String, etc, etc, etc)。我刚刚在访问数据时删除了多级字典引用,这两个问题都解决了。
  • 调试专家提示:检查过长的变量名和过长的命令。
【解决方案2】:

这表明您的代码中缺少一些Required 方法/函数。 就我而言,我使用的是ObjectMapper,而在我的课堂上,我忘记了包含required init() 方法,这导致了"Command failed due to signal: Segmentation fault: 11"

required init?(_ map: Map) {

}

【讨论】:

  • 我遇到了完全相同的问题。
  • 没错,我遇到了同样的问题。我正在实现一个 struct,但除了更改为 class 之外,我没有找到其他选择并为 init 添加 required。谢谢分享!
【解决方案3】:

看看你看到的另一个警告。

我的案例指出了 iOS9 和 GoogleAds 的问题。 见这里:https://developers.google.com/admob/ios/ios9

简短的回答是禁用构建设置 ENABLE_BITCODE。

我的错误:

ld: '/pp/src/shared_js/libs/GoogleMobileAdsSdkiOS-7.3.1/GoogleMobileAds.framework/GoogleMobileAds(GADGestureIdUtil.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture armv7
clang: error: unable to execute command: Segmentation fault: 11
clang: error: linker command failed due to signal (use -v to see invocation)

【讨论】:

  • 这对我来说是正确的方向,但我不得不这样做几次。没有清洁构建...是清洁构建。在我的情况下工作。
【解决方案4】:

在将各种项目转换为 Swift3.0 时,我多次遇到这个问题。

由于这个问题看起来是动态的,除了任何通用答案之外,每个人都有自己的解决方案。 但在这个问题中,主要问题是确定工作点。 所以我关注的内容如下:

  • 确定哪个方法对错误负责

    点击错误信息

  • 在这里您将识别导致错误生成编译的类 时间误差

在我的情况下 AppDelegate 负责。

  • 要查找错误行,请转到长错误描述的末尾。您将找到如下代码:

    1. While emitting IR SIL function @_TFC9MyProject11AppDelegate21getNotificationDetailfGSqGVs10DictionaryVs11AnyHashableP___T_ for 'getNotificationDetail' at /Users/ABC/Documents/BitBucket/iOS/2016/Projects/MyProject/AppDelegate/AppDelegate.swift:153:5

这里153AppDelegate.swift 中的代码行。

func getNotificationDetail(_ launchOptions : [AnyHashable: Any]?) {
    if launchOptions != nil {
        let dictLaunch = launchOptions! as NSDictionary
        NotificationCenter.default.addObserver(self, selector: #selector(AppDelegate.openRespectiveNotificationScreen), name: NSNotification.Name(rawValue: WebServiceKey.APPMANAGER_SERVICE_CALL_FINISH), object: nil)

        inactiveUserInfo  = dictLaunch.object(forKey: UIApplicationLaunchOptionsKey.remoteNotification) as? NSDictionary
    }
}

然后注释方法内的所有代码并再次构建。然后尝试逐行取消注释,最终得到产生错误的行。

找到确切的代码行后,您可以轻松修复它。

在我的代码中,我发现此方法的最后一行会产生错误。

所以我用下面的代码替换它,它构建成功。

inactiveUserInfo  = dictLaunch[UIApplicationLaunchOptionsKey.remoteNotification] as? NSDictionary

所以最重要的是谨慎调试。 试试这个方法,你一定能轻松解决错误。

【讨论】:

    【解决方案5】:

    首先,我建议仔细查看构建日志以查找有问题的文件。在我的例子中,for 循环中使用的可选值导致了构建过程中的分段错误。

    for i in 0..<hoge?.count {
    

    我修复了我的代码,如下所示;

    for i in 0..<hoge!.count {
    

    我现在没有错误。 \(^o^)/

    【讨论】:

    • Xcode 7.3 无法编译此代码,出现 Segmentation fault 错误。以前的版本可以。我指出这个问题是基于代码的,可以通过查看构建日志找到原因。
    【解决方案6】:

    仔细阅读调试信息。

    我遇到此错误是因为我在 if 语句中错误地使用了单个 '=' 而不是双 '='。

    if aString.characters.count = 2 {...}
    

    【讨论】:

    • 仔细阅读调试信息。 - 确切地!虽然错误消息只是“由于信号而导致命令失败:分段错误:11”,但原因隐藏在折叠的日志消息中。奇怪的是 Xcode 没有以正确的方式显示它。
    【解决方案7】:

    我有同样的错误是因为:

     let stringB: String? = stringA.characters.count = 0 ? nil : stringA
    

    解决方案是将其更改为:

     let stringB: String? = stringA.characters.count > 0 ? stringA : nil
    

    也许这对某人有帮助...

    【讨论】:

    • 我发现这种错误的语法会导致初始错误。谢谢你提到这个!
    • 你应该在条件语句中使用 == 而不是 =
    • 天哪,只见树木不见森林...谢谢奥斯卡
    • 所以为了记录,最近的解决方案是:let stringB: String? = stringA.characters.count == 0 ? nil : stringA
    【解决方案8】:

    我遇到了同样的问题。 Xcode 7.2.1。并选择错误并扩展日志,我可以发现编译错误隐藏在长路径中。

    请参见“1”之后的行。在附图中。它有一个文件和一行的引用。看着它,我可以找到错误。

    在我的例子中,我有一个无效的枚举分配,我将一些逻辑从一个结构移动到一个枚举并注入了这个错误:

    我有:

    return .Success(dict: dict)
    

    我应该有:

    return .Success(dict)
    

    【讨论】:

      【解决方案9】:

      我在 Xcode 版本 7.3 (7D175) swift 项目中遇到了这个编译错误。以下是场景:

      1. 在 swift 类中声明了“@objc 协议”
      2. 在实现此协议的另一个类中,未实现其中一个非可选方法

      实施该方法为我解决了问题。这可能是人们面临这个问题的原因之一。我希望这会有所帮助

      【讨论】:

        【解决方案10】:

        对我来说,问题(XCode 7.3.1)是在字典项上使用 += 运算符。

        例如:

        func test() {
            var myDict:[String:String] = [:]
            myDict["key"] = "pig"
            myDict["key"] += "dog"
        
            var myArray:[String] = []
            myArray.append("pig")
            myArray[0] += "dog"
         }
        

        这将导致分段错误。删除 myDict 上的 +=,一切正常。

        我知道这是一个错误(字典引用可以为空)但编译器不应该像这样废话。

        【讨论】:

          【解决方案11】:

          不幸的是,我总是遇到和你一样的错误。我建议你最好的方法是用新的 Xcode 重新创建一个新项目并将所有代码移植到这个新项目中,问题就会解决。顺便说一句,在更新任何地方像framework或xcode之后,可能会出现这个错误,苹果是愚蠢的。

          【讨论】:

          • 重新创建一个新项目需要一些时间,因为我使用的是第三方框架,这不值得。是的,苹果很蠢!
          【解决方案12】:

          您是否尝试重新打开项目和/或重新添加您的方案?我做到了,错误消失了。

          【讨论】:

            【解决方案13】:

            升级到 xCode 7 后,我的项目中出现了同样的错误。我决定删除新版本的 xCode 并安装 xCode 6.4。毕竟,它使用 xCode 6.4 工作得很好,所以我建议你一开始就这样做。另一方面,您应该始终保持最新状态,但您也可以同时拥有 xCode 6.4 和 7.0 :) 希望这对您有用!

            【讨论】:

              【解决方案14】:

              重启xcode。 Clean build (cmd+k, cmd+shift+k and clean build folder -> option+cmd+shift+k) 它应该可以解决问题。

              【讨论】:

              • 啊好的。但它适用于我们许多人。无论如何,然后尝试其他选择。我会尝试的最后手段是重新启动mac本身。由于引用或 XCode 错误,它多次帮助我解决了未知问题。
              • 重新启动最终解决了问题。谢谢!它发生在我所有的项目中,所以我认为这是一个比一行代码更大的问题。
              【解决方案15】:

              我试图将 NSData 写入文件,如下代码。

               if let currentResumeData = currentUserInfo["NSURLSessionDownloadTaskResumeData"]
               {
                   // the following "do" was giving the above mentioned compile error.
                   do {
                       try currentResumeData.writeToFile(fileNameString, options: .DataWritingAtomic)
                   } catch {}
                   // the above error code.
               }
              

              在阅读了 StackOverflow 上的各种答案后,我将其更改为 under,从而消除了错误。

               if let currentResumeData:NSData = currentUserInfo["NSURLSessionDownloadTaskResumeData"] as? NSData {
               {
                   do {
                       try currentResumeData.writeToFile(fileNameString, options: .DataWritingAtomic)
                   } catch {}
               }
              

              如您所见,编译器需要适当的 NSData 类型的变量“currentResumeData”来调用它的方法 .writeToFile。

              我相信,这对其他人会有所帮助。

              【讨论】:

                【解决方案16】:

                我试图利用 ??当这件事发生在我身上时,以一种聪明的方式。

                我猜 swift 不喜欢你尝试链接多个 ??一起,尽管语法高亮不会抛出任何错误:

                let ageNum = self.ageValue > 0 ?? self.birthday?.ageFromDate() ?? 0
                

                【讨论】:

                  【解决方案17】:

                  对我来说,问题在于改变我检查某事是否为假的方式。而不是:

                  if object1.hidden == false {
                  }
                  

                  改为:

                  if object1.hidden != true {
                  }
                  

                  【讨论】:

                    【解决方案18】:

                    对我来说,这是一个包含测试数据数组的冗长函数。

                    【讨论】:

                      【解决方案19】:

                      对我来说:

                      使用 Cast closures/blocks 函数后,我将 Closure 用作 AnyObject。错误已解决。

                      typealias UserCallBack = () -> Void
                      ...
                      if let callBack = callBack as? AnyObject {
                        request?.userInfo["callBack"] = callBack
                      }
                      

                      【讨论】:

                        【解决方案20】:

                        这是我修复的方法 - 首先是这里很多人建议的,请仔细阅读日志。它实际上会准确地告诉您失败的行号以及失败的原因。只需评论该行即可解决问题。就我而言,这是一个类型检查错误。 我正在使用 Gloss 结构进行 JSON 解析,看起来当您深入 JSON 层次结构时,有时内联解析器无法识别出存在编译时问题。当您构建项目时,它会失败。理想情况下,类型检查错误应该由内联解析器识别。所以这可能是 Xcode 的一个问题,但它的代码破坏了它。 当我阅读许多帖子时-我的分析如下..根本原因与类型检查有关。 当您尝试分配不正确的类型(可选或其他)时,内联解析器在某些情况下无法识别它。当您构建它时,它会识别它并导致分段错误。尽管 Xcode 存在错误,但我们的代码是错误的,如果我们仔细阅读日志可以修复它!

                        【讨论】:

                          【解决方案21】:

                          对我来说,这是由于在最终类的扩展中声明了一个结构:

                          final class X {
                              ...
                          } 
                          
                          extension X {
                              struct Y {
                                  ...
                              }
                          }
                          

                          【讨论】:

                            【解决方案22】:

                            我有一个项目不时发生在同一个文件中。我的解决方法是:

                            转到分段错误提到的文件,注释掉所有导入,运行(构建显然失败),取消注释所有导入 -> 构建成功。

                            如果对任何人有帮助的话,我的导入是 Firebase 和 FirebaseAuth。

                            【讨论】:

                              【解决方案23】:

                              我在尝试使用 Xcode 8.2.1 进行编译时收到此错误。我正在使用 Cocoa Pods 并怀疑其中一个 pod 是问题所在,因为在编译器的冗长错误输出中引用了一些 pod 的文件。退出 Xcode 并在我的项目目录中运行pod update 后(通过终端),当我重新打开我的项目时,我能够成功编译。

                              【讨论】:

                              • 看来我在使用 Xcode 8.2.1 和 CocoaPods 1.2.0 时也遇到了这个问题。然而,该项目在 Xcode 8.3 beta 中编译得很好。
                              【解决方案24】:

                              就我而言,我必须纠正的演员表类似于 Murat Yasar 的答案 (https://stackoverflow.com/a/36867502/512403),但我的演员有两个部分需要纠正。 编译器无法使用原始修复程序,因此我不得不进一步调整我的代码:

                              坏版本:

                              let jsonObject: AnyObject? = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments)
                              

                              好版本:

                              let jsonObject = try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! [String: AnyObject]
                              

                              也许这可以帮助那些不熟悉 Swift 怪癖的人。

                              【讨论】:

                                【解决方案25】:

                                该错误在 Xcode 的下一个版本中同时消失。在对苹果论坛进行了一些研究之后,该版本的“最佳”IDE Xcode 存在一个错误。希望所有答案对某人有所帮助。

                                【讨论】:

                                  猜你喜欢
                                  • 2015-12-18
                                  • 2015-12-16
                                  • 2015-02-20
                                  • 2017-02-06
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2017-03-14
                                  • 1970-01-01
                                  相关资源
                                  最近更新 更多