1

我正在尝试在 Xcode 3.2.4 中构建应用程序并收到以下链接器错误:

Undefined symbols:
  "___block_global_1", referenced from:
      ___block_holder_tmp_1.120 in foobarbaz.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

我无法解释我在源文件中所做的可能导致错误的操作。我确实有一个我定义为全局变量的块,如下所示:

typedef void(^error_block_t)(NSError* error);

error_block_t error_handler_s = ^void(NSError* error)
{
    //...
}

这个块是在源代码的一个空命名空间中定义的(我正在编译 Objective-C++。)一切都编译没有错误。

更新:将块移动为引用它的例程的局部变量是一种可行的(尽管不是首选)解决方法。

是什么赋予了?

4

2 回答 2

0

如果error_handler_s不打算导出,您可以将其static作为另一种解决方法。

namespace {
  ...
  static error_block_t error_handler_s = ^void(NSError* error) { ... };
  ...
}

否则,我相信这是 gcc 中的一个错误。

于 2010-10-08T19:12:32.377 回答
0

在这一点上,我认为这个问题是一个错误。

于 2010-10-28T17:50:41.097 回答