Frage

Ich habe (unten) entdeckt, dass ich -fblocks zu verwenden, wenn der Code kompiliert, die Blöcke verwendet.

Was Bibliothek muss ich Link gegen den Linker resolve _NSConcreteStackBlock lassen? (Bei 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)
War es hilfreich?

Lösung

Clang bietet keine noch eine einfache Möglichkeit, Blöcke auf Plattformen zu verwenden, die nicht über integrierte Betriebssystemunterstützung (beispielsweise Snowleopard). Sie können einige weitere Informationen über das libdispatch Projekt finden Sie hier:    http://libdispatch.macosforge.org/ und auf dem Compiler-rt-Projekt (das bietet die Block Laufzeit) hier:    http://compiler-rt.llvm.org/ aber das ist noch nicht gut verpackt für Clang Endverbraucher.

Wenn Sie in einem wenig graben wollen, das Compiler-rt-Projekt hat die Blöcke darin Laufzeit, und Sie können, dass eine Bibliothek bauen verwenden, die die NSConcreteStackBlock bieten.

Andere Tipps

Verwenden Sie die Anweisungen unter http://mackyle.github.com/blocksruntime/ build a libBlocksRuntime.a Bibliothek, dass Sie mit verknüpfen können.

Installieren Sie das libBlocksRuntime auf Ubuntu mit:

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

Zum Kompilieren, ist die Bibliothek und -fblocks:

clang ctest.c -fblocks -lBlocksRuntime

Dies ist auch auf anderen Betriebssystemen zur Verfügung. FreeBSD und MidnightBSD beide gehören Klirren und libBlocksRuntime.so

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top