На какие библиотеки вам нужно ссылаться для программы clang, использующей блоки - PullRequest
5 голосов
/ 19 февраля 2010

Я обнаружил (ниже), что мне нужно использовать -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)

Ответы [ 3 ]

5 голосов
/ 20 февраля 2010

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

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

4 голосов
/ 20 сентября 2011

Используйте инструкции на http://mackyle.github.com/blocksruntime/ для создания библиотеки libBlocksRuntime.a, с которой вы можете связать.

0 голосов
/ 17 июля 2015

Установите 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

...