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 に答える