Clang tiene una extensión muy genial llamada block que lleva el verdadero mecanismo de función lambda a C. Comparado con el bloque, las funciones anidadas de gcc son bastante limitadas. Sin embargo, tratando de compilar un programa trivial c.c
:Clang bloque en Linux?
#include <stdio.h> int main() { void (^hello)(void) = ^(void) { printf("Hello, block!\n"); }; hello(); return 0; }
con clang -fblocks c.c
, llegué
/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)
parece que debo usar clang -fblocks c.c -lBlocksRuntime
, pero luego me
/usr/bin/ld.gold: error: cannot find -lBlocksRuntime (the rest is the same as above)
¿Alguna pista?
¿Ha instalado la extensión correctamente? ¿Dónde terminaron 'libBlocksRuntime.a' y/o' libBlocksRuntime.so'? ¿Ese directorio está en la ruta de búsqueda de la biblioteca de enlaces predeterminada? ¿Necesita usar un argumento '-L' para agregar el directorio a la ruta de búsqueda? – QuantumMechanic
@QuantumMechanic Instalé clang del repositorio de Arch Linux. '-fblocks' funciona, así que creo que la construcción de clang de Arch tiene la extensión. Hice una búsqueda de '* BlocksRuntime *' en '/ usr/lib' y no encontré ninguno. ¿Alguna pista sobre dónde se encuentran generalmente estas bibliotecas? – xiaq
'sudo apt-get install libblocksruntime-dev' en Ubuntu funciona bien, estoy usando bloques en código de producción C en Ubuntu. –