Pergunta

Descobri (abaixo) que preciso usar -fblocks ao compilar código que usa blocos.

Com que biblioteca eu preciso vincular para permitir que o vinculador resolva _NSCONCRETEstackBlock? (No 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)
Foi útil?

Solução

O CLANG ainda não fornece uma maneira fácil de usar blocos em plataformas que não possuem suporte de sistema operacional interno (por exemplo, snowloopard). Você pode encontrar mais informações sobre o projeto Libdispatch aqui: http://libdispatch.macosforge.org/e no projeto Compiler-RT (que fornece o tempo de execução dos blocos) aqui: http://compiler-rt.llvm.org/Mas isso ainda não está bem embalado para usuários finais do CLANG.

Se você quiser cavar um pouco, o projeto Compiler-RT possui o tempo de execução dos blocos e você pode usá-lo para criar uma biblioteca que fornecerá o NSconcreteStackBlock.

Outras dicas

Use as instruções em http://mackyle.github.com/blocksruntime/ Para construir uma biblioteca LibBlocksRuntime. Uma com a qual você pode vincular.

Instale o libblocksruntime no Ubuntu com:

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

Para compilar, inclua a biblioteca e -fblocks:

clang ctest.c -fblocks -lBlocksRuntime

Isso também está disponível em outros sistemas operacionais. FreeBSD e Midnightbsd incluem Clang e Libblocksruntime.so

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top