Quelles bibliothèques avez-vous besoin de lier contre pour un programme clang utilisant des blocs

StackOverflow https://stackoverflow.com/questions/2297765

Question

Je l'ai découvert (ci-dessous) que je dois -fblocks utiliser lorsque la compilation du code qui utilise des blocs.

Quelle bibliothèque dois-je créer un lien contre pour laisser la détermination de linker _NSConcreteStackBlock? (Sur 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)
Était-ce utile?

La solution

Clang ne fournit pas encore un moyen facile d'utiliser des blocs sur les plates-formes qui n'ont pas intégré à l'appui du système d'exploitation (par exemple, snowleopard). Vous pouvez trouver plus d'informations sur le projet libdispatch ici:    http://libdispatch.macosforge.org/ et sur le projet compilateur-rt (qui fournit le moteur d'exécution de blocs) ici:    http://compiler-rt.llvm.org/ mais ce n'est pas encore bien emballé pour les utilisateurs finaux Clang.

Si vous voulez creuser un peu, le projet compilateur-rt a le temps d'exécution des blocs, et vous pouvez l'utiliser pour construire une bibliothèque qui fournira le NSConcreteStackBlock.

Autres conseils

Utilisez les instructions http://mackyle.github.com/blocksruntime/ pour construire une bibliothèque libBlocksRuntime.a que vous pouvez créer un lien avec.

Installer le libBlocksRuntime sur Ubuntu avec:

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

Pour compiler, inclure la bibliothèque et -fblocks:

clang ctest.c -fblocks -lBlocksRuntime

Il est également disponible sur d'autres systèmes d'exploitation. FreeBSD et MidnightBSD comprennent tous deux des Clang et libBlocksRuntime.so

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top