Блок лягушек в Linux? - PullRequest
       36

Блок лягушек в Linux?

8 голосов
/ 06 мая 2011

Clang имеет очень классное расширение с именем block , обеспечивающее истинный механизм лямбда-функции для C. По сравнению с block, вложенные функции gcc довольно ограничены. Однако, пытаясь скомпилировать тривиальную программу c.c:

#include <stdio.h>

int main() {
    void (^hello)(void) = ^(void) {
        printf("Hello, block!\n");
    };
    hello();
    return 0;
}

с clang -fblocks c.c, я получил

/usr/bin/ld.gold: /tmp/cc-NZ7tqa.o: in function __block_literal_global:c.c(.rodata+0x10): error: undefined reference to '_NSConcreteGlobalBlock'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

кажется, я должен использовать clang -fblocks c.c -lBlocksRuntime, но потом я получил

/usr/bin/ld.gold: error: cannot find -lBlocksRuntime
(the rest is the same as above)

Есть подсказки?

Ответы [ 2 ]

21 голосов
/ 19 июня 2012

В 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!

отлично работает.

1 голос
/ 06 мая 2011

Судя по С какими библиотеками вам нужно ссылаться для программы clang, использующей блоки , кажется, нет простого способа исправить это, по крайней мере, в начале 2010 года.

...