2010-02-19 10 views
5

Odkryłem (poniżej), że muszę użyć -fblocks podczas kompilowania kodu, który używa bloków.Które biblioteki należy połączyć z programem bloków przy użyciu bloków

Jakiej biblioteki należy użyć, aby linker mógł rozwiązać _NSConcreteStackBlock? (Na 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) 

Odpowiedz

5

Clang jeszcze nie zapewniają łatwy sposób na wykorzystanie bloków na platformach, które nie posiadają wbudowaną obsługę systemu operacyjnego (np Snowleopardobraz). można znaleźć więcej informacji na temat projektu libdispatch tutaj: http://libdispatch.macosforge.org/ i na temat projektu kompilator-RT (który zapewnia środowisko wykonawcze bloków) tutaj: http://compiler-rt.llvm.org/ ale to nie jest jeszcze dobrze zapakowane dla użytkowników końcowych, dzyń.

Jeśli chcesz zagłębić się w coś, projekt kompilatora-rt ma w sobie środowisko wykonawcze bloków i możesz go użyć do zbudowania biblioteki, która zapewni NSConcreteStackBlock.

0

Zainstalować libBlocksRuntime na Ubuntu z:

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

Aby skompilować, to biblioteki i -fblocks:

clang ctest.c -fblocks -lBlocksRuntime 

ten jest także dostępny w innych systemach operacyjnych. FreeBSD i MidnightBSD zawierają clang i libBlocksRuntime.so

Powiązane problemy