我試圖建立在Xcode 3.2.4應用程序和正在以下鏈接錯誤:Xcode的連接器和模塊:未定義的符號「___block_global_1」
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++)編譯沒有錯誤。
更新:將塊移動爲引用它的例程的局部變量是可行的(雖然不是首選)解決方法。
什麼給?
感謝您的回覆;如果我閱讀規範右側的7.3.1.1(2),似乎我使用的匿名名稱空間範式優於聲明變量「static」 - 因爲前者旨在替換後者,所以我看不到這將如何幫助。如果我錯了,請告訴我。 – fbrereto 2010-10-08 20:46:47
@fbrereto:理論上,是的。但是,在gcc中,匿名命名空間中的非'靜態'全局變量仍然會爲鏈接器生成一個符號,而'static'全局變量則不會。標準並不總是正確地描述現實世界。 – kennytm 2010-10-09 06:41:48
你對標準訴現實世界當然是正確的!我會給你的建議一個鏡頭;謝謝。 – fbrereto 2010-10-09 16:30:59