Я обнаружил (ниже) этого, я должен использовать-fblocks при компиляции кода, который использует блоки.
Против какой библиотеки я должен связаться позволить компоновщику разрешить _NSConcreteStackBlock? (На Ubuntu 9.10 AMD64.)
chris@chris-desktop:~$ clang ctest.c
ctest.c:3:25: error: blocks support disabled - compile with -fblocks or pick a
deployment target that supports them
void call_a_block(void (^blockptr)(int)) {
^
ctest.c:11:19: error: blocks support disabled - compile with -fblocks or pick a
deployment target that supports them
call_a_block( ^(int y) {
^
2 diagnostics generated.
chris@chris-desktop:~$ clang ctest.c -fblocks
/tmp/cc-4sPSeO.o: In function `main':
ctest.c:(.text+0x79): undefined reference to `_NSConcreteStackBlock'
collect2: ld returned 1 exit status
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Clang пока не предоставляет простой способ использования блоков на платформах, которые не имеют встроенной поддержки операционной системы (например, SnowLeopard). Вы можете найти дополнительную информацию о проекте libdispatch здесь: http://libdispatch.macosforge.org/ и о проекте compiler-rt (который предоставляет блоки runtime) здесь: http://compiler-rt.llvm.org/ , но это еще не очень хорошо упаковано для конечных пользователей Clang.
Если вы хотите немного покопаться, в проекте compiler-rt действительно есть среда выполнения блоков, и вы можете использовать ее для создания библиотеки, которая предоставит NSConcreteStackBlock.