J'ai découvert (ci-dessous) que j'ai besoin d'utiliser -fblocks lors de la compilation de code qui utilise des blocs.
Quelle bibliothèque dois-je créer un lien contre pour laisser la liaison à résoudre _nsconcretstackblock? (Sur Ubuntu 9,10 AMD64.) P>
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)
3 Réponses :
Clang ne fournit pas encore de moyen simple d'utiliser des blocs sur des plates-formes qui n'ont pas d'assistance intégrée du système d'exploitation (par exemple, Snowleopard). Vous pouvez trouver d'autres informations sur le projet LibDisPatch ici: http://libdispatch.macosforge.org/ et sur le projet Compiler-RT (qui fournit les blocs d'exécution) ici: http://compiler-rt.llvm.org/ Mais cela n'est pas encore bien emballé pour les utilisateurs finaux de Clang. P>
Si vous souhaitez creuser un peu, le projet Compiler-RT dispose des blocs d'exécution des blocs et vous pouvez l'utiliser pour créer une bibliothèque qui fournira le nsconcretestackblock. P>
Utilisez les instructions de http://mackyle.github.com/blocksruntime/ pour construire un libblocksruntime.a la bibliothèque que vous pouvez relier avec. p>
Installer le libblocksRuntime sur Ubuntu avec:
clang ctest.c -fblocks -lBlocksRuntime