Clang有一个非常酷的扩展,名为block,将真正的lambda函数机制带给了C。与block相比,gcc的嵌套函数非常有限。但是,尝试编译一个琐碎的程序c.c:
c.c
#include <stdio.h> int main(){ void(^ hello)(void)= ^(void){ printf(“ Hello,block!\ n”); }; 你好(); 返回0; }
与clang -fblocks c.c,我得到了
clang -fblocks c.c
/usr/bin/ld.gold:/tmp/cc-NZ7tqa.o:在函数__block_literal_global:cc(.rodata + 0x10)中:错误:对'_NSConcreteGlobalBlock'的未定义引用 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
似乎我应该使用clang -fblocks c.c -lBlocksRuntime,但是后来我得到了
clang -fblocks c.c -lBlocksRuntime
/usr/bin/ld.gold:错误:找不到-lBlocksRuntime (其余与上述相同)
有什么提示吗?
在Ubuntu Linux上:
sudo apt-get install llvm sudo apt-get install clang sudo apt-get install libblocksruntime-dev
test.c:
test.c
#include <stdio.h> int main() { void (^hello)(void) = ^(void) { printf("Hello, block!\n"); }; hello(); return 0; }
编译:
clang test.c -fblocks -lBlocksRuntime -o test ./test Hello, block!
工作良好。