Clang a une extension très cool nommée Block apporter le vrai mécanisme de fonction Lambda à C . Par rapport au bloc, les fonctions imbriquées par GCC sont assez limitées. Cependant, essayer de compiler un programme trivial avec semble que je devrais utiliser cc code>:
clommefblocks cc code>, j'ai p>
clomme -fblocks cc -lblocksruntime code>, mais j'ai obtenu p>
/usr/bin/ld.gold: error: cannot find -lBlocksRuntime
(the rest is the same as above)
3 Réponses :
juger de
sur Ubuntu Linux: compile: p> fonctionne bien. p> p> test.c code>: p>
Informations techniques d'arrière-plan: P>
Les blocs eux-mêmes sont une fonctionnalité linguistique, mais ils nécessitent également un soutien d'exécution. Donc, soit le compilateur doit fournir une bibliothèque d'exécution et le lier statiquement dans le produit de construction ou le système doit fournir une telle bibliothèque d'exécution que le produit de construction peut être lié. P>
Dans le cas de MacOS, les blocs d'exécution font partie de LibSystem et, comme toutes les bibliothèques exécutables et dynamiques sur MacOS sont liées à la libsystème, elles ont tous des blocs de support. P>
Sur un système Linux, support tel d'exécution serait généralement ajouté à la libc (glibc dans la plupart des cas) si elle était considérée comme une caractéristique essentielle du système ou la langue, mais comme gcc n'a actuellement aucun support pour les blocs du tout et Son inconnu si des blocs deviendront une fonctionnalité C officielle, les systèmes Linux ne transportent pas la prise en charge d'exécution des blocs par défaut. P>
Clang elle-même propose un élément d'exécution des blocs d'indépendants cible dans le cadre du bibliothèque d'exécution de compilateur , Pourtant, il est facultatif et de nombreux systèmes Linux ne semblent pas inclure dans leur package d'installation de clang. C'est pourquoi le projet BlocksRuntime a été créé, qui construit le support d'exécution de Blang Blocks en tant que propre bibliothèque, que vous pouvez lier de manière statique à vos projets ou d'installer de manière dynamique sur vos systèmes. Le code source est disponible sur github. P>
Selon votre distribution Linux, un package d'installation prêt à l'emploi peut exister. Notez que BlocksRuntime ne peut pas simplement être compilé pour Linux, il peut également être compilé pour FreeBSD ou Windows (Mingw / Mingw-W64) ou même pour Mac si vous ne souhaitez pas utiliser l'exécution que fournit Apple. Théoriquement, il devrait être portable à toute plate-forme qui soutient nativement nativement. P>
Avez-vous installé l'extension correctement? Où est-ce que
libblocksruntime.a code> et / ou
libblocksruntime.so code> finissez-vous? Est-ce répertoire dans le chemin de recherche de la bibliothèque de liaison par défaut? Avez-vous besoin d'utiliser un argument
-l code> pour ajouter le répertoire au chemin de recherche?
@Quantumechanic j'ai installé CLANG de la repo d'Arch Linux.
-FBLOCKS CODE> fonctionne pour que je pense que la construction de Clang de la voûte a l'extension. J'ai fait une recherche de
* blocksruntime * code> dans
/ usr / lib code> et trouvé aucun. Toute indice sur l'endroit où ces bibliothèques sont généralement situées?
sudo apt-get Installer libblocksRuntime-dev code> sur Ubuntu fonctionne bien, j'utilise des blocs dans le code de production C sous Ubuntu.
En tant que pirate, ajoutez un bloc de mémoire nommé
_nsconcreteglobalblock code>. tio.run/...