Domanda

Sto cercando di creare un'applicazione in Xcode 3.2.4 e sto ottenendo il seguente errore di linker:

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

Sono in perdita per spiegare quello che ho fatto nel mio file di origine che potrebbe essere la causa dell'errore. Ho un blocco che io sto definendo come una variabile globale, in questo modo:

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

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

Questo blocco è definito in uno spazio dei nomi vuoto nella fonte (Sto compilando Objective-C ++.) Compilazione tutto senza errori.

Aggiornamento:. Spostamento del blocco da una variabile locale per la routine che i riferimenti si tratta di una valida (anche se non preferito) soluzione

Ciò che dà?

È stato utile?

Soluzione 2

A questo punto credo che questo problema è un bug.

Altri suggerimenti

Se il error_handler_s non è destinato ad essere esportato, si potrebbe rendere static come un'altra soluzione.

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

In caso contrario, credo che questo sia un bug in gcc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top