GCD函数导致架构x86_64的未定义符号

时间:2013-12-27 13:26:34

标签: ios objective-c clang grand-central-dispatch

我在代码中使用dispatch_oncedispatch_async来分别处理单例和并发。

dispatch_once代码并不太复杂:

+ (instancetype)sharedInstance {
    static dispatch_once_t once;
    static id sharedInstance;

    dispatch_once(&once, ^
                  {
                      sharedInstance = [self new];
                  });

    return sharedInstance;
}

对于dispatch_async,它只是在Facebook API调用返回内执行的代码块(以确保它在主线程上执行):

dispatch_async(dispatch_get_main_queue(), ^{
            [self.tableView reloadData];
            [self.tableView setNeedsDisplay];
        });

当我编译我的x86应用程序时,它工作正常,没有错误出现。如果我为x86_64(64位)编译,则会引发以下错误:

Undefined symbols for architecture x86_64:
  "_NR__dispatch_async", referenced from:
      ___23-[SNFFeedTVC getPhotos]_block_invoke in SNFFeedTVC.o
  "_NR__dispatch_once", referenced from:
      +[SNFFacebook sharedInstance] in SNFFacebook.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我使用的GCD代码是标准的,并不复杂,所以我不知道它为什么不能为这个架构编译。有没有解决这个问题?

0 个答案:

没有答案