【问题标题】:Command failed due to signal: Segmentation fault: 11 compile error由于信号导致命令失败:分段错误:11 编译错误
【发布时间】:2015-12-16 20:01:21
【问题描述】:

我花了很多时间试图自己解决这个问题,并且已经仔细检查了 SO 上的可用答案,但出现了同样的错误。所以这里是我已经排除的可能原因的列表:

  1. here 所示的框架没有问题。我创建了另一个具有相同框架集的项目,一切都很好
  2. 没有issue with SwiftyJSON,在测试项目中也可以正常工作
  3. 代码中没有突出显示编译问题
  4. 我使用比较工具浏览了两个不同的project.pbxproj 文件(来自我的原始项目和新的测试项目),发现项目设置的一些差异,都一样
  5. 我还比较了两个项目的构建命令选项,都一样

当我转到 Report Navigator 并查找每个未成功编译的文件时,我发现了一些奇怪的关联:任何使用 NSString 的某些 API 的文件都无法编译。为了证明这个假设,我找到了一些编译成功的文件,并在其中添加了以下代码行

let abc = NSString(string: "abc")

然后这个文件也停止编译。

所以对于某些文件,它说使用as NSString 转换String 类对象是无效的,在某处NSAttributedString/NSString 创建失败,在其他一些地方调用compare 或rangeOfString 是不正确的等等。但是当我将所有导致Segmentation fault 错误的代码复制粘贴到我的新项目时,它们编译成功

当然,该项目在一天前使用 Xcode 6 编译得很好

我不知道从哪里开始以及如何解决这些问题,任何帮助都会非常有用

UPD

我上传了无法编译的项目到GitHub

【问题讨论】:

  • let abc = NSString(string: "abc") 单独编译(如果“Foundation”被导入)。您能否提供显示该问题的最少示例代码? – 在任何情况下,编译器分段错误都是错误,应报告给 Apple。
  • @MartinR 正如我已经提到的,如果我创建新项目,任何列出的问题都会消失,所有编译成功。这只发生在我最初在 Xcode 6 中创建的项目上
  • @MartinR 我清理了我的原始项目并上传到GitHub。请检查一下
  • 对我来说这是一个包含测试数据数组的冗长函数,

标签: ios swift segmentation-fault xcode7


【解决方案1】:

在你项目的“MYHelpers.h/.m”中(大概来自https://github.com/AlexandrGraschenkov/MYHelpers) 定义了带有一些实用方法的NSString 类别:

#pragma mark - NSString+Utils

@interface NSString (Utils)
- (NSString *)trim; // trim whitespace characters with new line
- (NSString *):(NSString *)appendString;
- (NSURL *)toURL;
- (NSString *)URLEncodedString;
- (NSString *)URLDecodedString;
- (NSString *)lightURLEncodeString;
+ (BOOL)emailValidate:(NSString *)email;
- (CGSize)sizeForStringWithFont:(UIFont *)font constrainedToSize:(CGSize)size;
- (id)JSON;
@end

第二种方法

- (NSString *):(NSString *)appendString;

有一个空选择器名称。这在 Objective-C 中是允许的, 你可以调用该方法

NSString *foobar = [@"foo" :@"bar"];

(我不知道这个方法是不是故意用空定义的 选择器名称——我不推荐它。)

但它会导致 Swift 编译器崩溃。仅当NSString 时才会发生这种情况 在 Swift 代码的某处被引用。 (编译器永远不会崩溃,无论输入的格式多么错误, 所以我建议向 Apple 提交错误报告)。

您可以将方法重命名为

- (NSString *)appendString:(NSString *)appendString;

(或者如果您的项目中不需要它,则直接将其删除), 这应该可以解决问题。

【讨论】:

  • @Azat:是的,在我收工之前做一些侦探工作 :)
【解决方案2】:

我在我的项目中也遇到了同样的问题。 我的场景: 在下面找到我最后发现这个错误的场景。 1. 我在我的 swift 项目中使用我的 Objective-C 代码。 2. 基本上这是我在代码中使用的UIImage 的category 类。

此错误的原因:据我所知,编译器与某些位代码混淆,无法显示确切原因。所以它抛出了以下消息:

由于信号导致命令失败:分段错误:11

我的解决方案: 我刚刚在我的类别类头文件中导入了#import <UIKit/UIKit.h>,我的错误已立即解决。

很高兴为您提供帮助!

【讨论】:

    猜你喜欢
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 2017-06-23
    • 2018-11-06
    • 1970-01-01
    • 2015-12-18
    • 2018-09-14
    相关资源
    最近更新 更多