Quali librerie di fare il necessario per collegare contro per un programma clang utilizzando blocchi
-
21-09-2019 - |
Domanda
ho scoperto (sotto) che ho bisogno di usare -fblocks durante la compilazione di codice che utilizza i blocchi.
Cosa biblioteca ho bisogno per collegare contro di lasciare che il linker _NSConcreteStackBlock determinazione? (Su 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)
Soluzione
Clang non fornisce ancora un modo semplice per utilizzare blocchi su piattaforme che non sono dotati di supporto del sistema operativo (ad esempio, SnowLeopard). Potete trovare qualche informazione in più sul progetto libdispatch qui: http://libdispatch.macosforge.org/ e sul progetto del compilatore-rt (che fornisce il runtime blocchi) qui: http://compiler-rt.llvm.org/ ma questo non è ancora ben confezionato per gli utenti finali Clang.
Se si vuole scavare un po ', il progetto del compilatore-rt non hanno il tempo di esecuzione blocchi in esso, ed è possibile utilizzare che per costruire una biblioteca che fornirà il NSConcreteStackBlock.
Altri suggerimenti
Utilizzare le istruzioni a http://mackyle.github.com/blocksruntime/ per costruire un libBlocksRuntime.a libreria che è possibile collegare con.
Installare il libBlocksRuntime su Ubuntu con:
sudo apt-get install llvm
sudo apt-get install clang
sudo apt-get install libblocksruntime-dev
Per compilare, includere la libreria e -fblocks:
clang ctest.c -fblocks -lBlocksRuntime
Questa è disponibile su altri sistemi operativi anche. FreeBSD e MidnightBSD entrambi includono clang e libBlocksRuntime.so