Que las bibliotecas se necesita para enlace en contra de un programa de sonido metálico utilizando bloques
-
21-09-2019 - |
Pregunta
he descubierto (continuación) que necesito para usar -fblocks al compilar código que utiliza bloques.
¿Qué biblioteca necesito para enlace en contra de dejar que el enlazador _NSConcreteStackBlock resolución? (En 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)
Solución
Sonido metálico aún no proporcionan una manera fácil de utilizar bloques en plataformas que no se han incorporado en el apoyo del sistema operativo (por ejemplo, SnowLeopard). Puede encontrar más información sobre el proyecto libdispatch aquí: http://libdispatch.macosforge.org/ y en el proyecto compilador-rt (que proporciona los bloques de tiempo de ejecución) aquí: http://compiler-rt.llvm.org/ aún no, pero esto está bien acondicionado para los usuarios finales Clang.
Si quiere cavar un poco, el proyecto compilador-rt sí tiene los bloques de tiempo de ejecución en ella, y se puede utilizar eso para construir una biblioteca que proporcionará la NSConcreteStackBlock.
Otros consejos
Utilice las instrucciones en http://mackyle.github.com/blocksruntime/ para construir una libBlocksRuntime.a biblioteca que se puede enlazar con.
Instalar el libBlocksRuntime en Ubuntu con:
sudo apt-get install llvm
sudo apt-get install clang
sudo apt-get install libblocksruntime-dev
Para compilar, incluir la biblioteca y -fblocks:
clang ctest.c -fblocks -lBlocksRuntime
Esto también está disponible en otros sistemas operativos. FreeBSD y MidnightBSD tanto incluyen sonido metálico y libBlocksRuntime.so