10
votes

Block de clang sous Linux?

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 cc code>: xxx pré>

avec clommefblocks cc code>, j'ai p> Xxx pré>

semble que je devrais utiliser 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)


4 commentaires

Avez-vous installé l'extension correctement? Où est-ce que libblocksruntime.a et / ou libblocksruntime.so 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 pour ajouter le répertoire au chemin de recherche?


@Quantumechanic j'ai installé CLANG de la repo d'Arch Linux. -FBLOCKS fonctionne pour que je pense que la construction de Clang de la voûte a l'extension. J'ai fait une recherche de * blocksruntime * dans / usr / lib et trouvé aucun. Toute indice sur l'endroit où ces bibliothèques sont généralement situées?


sudo apt-get Installer libblocksRuntime-dev 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 . tio.run/...


3 Réponses :


1
votes

juger de Quelles bibliothèques avez-vous besoin pour créer un lien contre un programme de Clang à l'aide de blocs qu'il apparaît qu'il n'y a pas de moyen facile de résoudre ce problème, au moins à partir du début de 2010.


0 commentaires

22
votes

sur Ubuntu Linux: xxx

test.c : xxx

compile: xxx

fonctionne bien.


0 commentaires

0
votes

Informations techniques d'arrière-plan:

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é.

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.

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.

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.

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.


0 commentaires