6

我发现(如下)在编译使用块的代码时需要使用 -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)
4

3 回答 3

6

Clang 还没有提供在没有内置操作系统支持的平台(例如,SnowLeopard)上使用块的简单方法。您可以在此处找到有关 libdispatch 项目的更多信息:http://libdispatch.macosforge.org/ 有关 compiler-rt 项目(提供块运行时)的 更多信息:http: //compiler-rt.llvm.org/ 但这还没有为 Clang 最终用户打包好。

如果您想深入了解一下,compiler-rt 项目中确实包含块运行时,您可以使用它来构建一个库,该库将提供 NSConcreteStackBlock。

于 2010-02-20T06:34:33.047 回答
4

使用http://mackyle.github.com/blocksruntime/上的说明构建一个可以链接的 libBlocksRuntime.a 库。

于 2011-09-20T07:40:32.240 回答
2

在 Ubuntu 上安装 libBlocksRuntime:

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

于 2015-07-16T23:21:25.140 回答