小编典典

Linux中的Clang块?

linux

Clang有一个非常酷的扩展,名为block,将真正的lambda函数机制带给了C。与block相比,gcc的嵌套函数非常有限。但是,尝试编译一个琐碎的程序c.c

#include <stdio.h>

int main(){
    void(^ hello)(void)= ^(void){
        printf(“ Hello,block!\ n”);
    };
    你好();
    返回0;
}

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,但是后来我得到了

/usr/bin/ld.gold:错误:找不到-lBlocksRuntime
(其余与上述相同)

有什么提示吗?


阅读 369

收藏
2020-06-07

共1个答案

小编典典

在Ubuntu Linux上:

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

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!

工作良好。

2020-06-07