2010-02-19 3 views
5

Я обнаружил (ниже), что мне нужно использовать -fblocks при компиляции кода, который использует блоки.Какие библиотеки вам нужно связать для программы clang с использованием блоков

Какую библиотеку мне нужно установить, чтобы разрешить компоновщику _NSConcreteStackBlock? (В Ubuntu 9.10 AMD64.)

[email protected]:~$ 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. 
[email protected]:~$ 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) 

ответ

5

Clang еще не обеспечивает простой способ использования блоков на платформах, которые не имеют встроенную поддержку операционной системы (например, SnowLeopard). Вы можете найти более подробную информацию о проекте libdispatch здесь: http://libdispatch.macosforge.org/ и по проекту компилятора Rt (который обеспечивает выполнения блоков) здесь: http://compiler-rt.llvm.org/ , но это не хорошо упаковано для конечных пользователей звона.

Если вы хотите немного выкопать, проект compiler-rt имеет в нем блоки выполнения, и вы можете использовать его для создания библиотеки, которая предоставит NSConcreteStackBlock.

0

Установите libBlocksRuntime на Ubuntu с:

sudo apt-get install llvm 
sudo apt-get install clang 
sudo apt-get install libblocksruntime-dev 

Для компиляции, включают в себя библиотеку и -fblocks:

clang ctest.c -fblocks -lBlocksRuntime 

Это также доступно на других операционных системах. FreeBSD и MidnightBSD включают clang и libBlocksRuntime.so