您需要使用块链接哪些库来进行clang程序

时间:2010-02-19 16:15:50

标签: ubuntu llvm clang objective-c-blocks

我发现(下面)我在编译使用块的代码时需要使用-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 个答案:

答案 0 :(得分:5)

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

如果你想深入挖掘一下,编译器-rt项目确实有块运行时,你可以用它来构建一个提供NSConcreteStackBlock的库。

答案 1 :(得分:4)

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

答案 2 :(得分:0)

使用以下命令在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