GNU/Linux >> Linux Esercitazione >  >> Linux

Blocco Clang in Linux?

Su Ubuntu Linux:

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

test.c :

#include <stdio.h>

int main() {
    void (^hello)(void) = ^(void) {
        printf("Hello, block!\n");
    };
    hello();
    return 0;
}

compilare:

clang test.c -fblocks -lBlocksRuntime -o test
./test

Hello, block!

funziona bene.


Informazioni tecniche di base:

I blocchi stessi sono funzionalità linguistiche ma richiedono anche un supporto di runtime. Quindi o il compilatore deve fornire una libreria di runtime e collegarla staticamente al prodotto di compilazione oppure il sistema deve fornire tale libreria di runtime a cui il prodotto di compilazione può essere collegato.

Nel caso di macOS, il runtime dei blocchi fa parte di libSystem e poiché tutte le librerie eseguibili e dinamiche su macOS sono collegate a libSystem, hanno tutte il supporto per i blocchi.

Su un sistema Linux, tale supporto di runtime verrebbe tipicamente aggiunto alla libreria libC (glibc nella maggior parte dei casi) se fosse considerata una caratteristica fondamentale del sistema o del linguaggio, ma poiché gcc attualmente non ha alcun supporto per i blocchi ed è sconosciuto se i blocchi diventeranno mai una funzionalità C ufficiale, i sistemi Linux non forniscono il supporto di runtime per i blocchi per impostazione predefinita.

clang stesso offre un runtime di blocchi indipendente dal target come parte della libreria di runtime del compilatore, tuttavia è facoltativo e molti sistemi Linux non sembrano includere nel loro pacchetto di installazione clang. Ecco perché è stato creato il progetto blocksruntime, che costruisce il supporto runtime di clang blocks come una propria libreria, che puoi collegare staticamente ai tuoi progetti o installare dinamicamente sui tuoi sistemi. Il codice sorgente è disponibile su GitHub.

A seconda della tua distribuzione Linux, potrebbe esistere un pacchetto di installazione pronto per l'uso. Si noti che blocksruntime non può essere compilato solo per Linux, può anche essere compilato per FreeBSD o Windows (MinGW/Mingw-w64) o anche per Mac se non si desidera utilizzare il runtime fornito da Apple. Teoricamente dovrebbe essere portabile su qualsiasi piattaforma supportata nativamente da clang.


A giudicare da quali librerie è necessario collegarsi per un programma clang che utilizza i blocchi, sembra che non ci sia un modo semplice per risolvere questo problema, almeno dall'inizio del 2010.


Linux
  1. Come bloccare l'indirizzo IP su un server Linux

  2. Come bloccare l'indirizzo IP su un server Linux

  3. Come bloccare o disabilitare i normali accessi utente in Linux

  4. Clang vs GCC per il mio progetto di sviluppo Linux

  5. Blocca comando particolare in Linux per utente specifico

Come controllare i settori danneggiati o i blocchi danneggiati sul disco rigido in Linux

Comando blkid di Linux per trovare i dettagli dei dispositivi a blocchi

Comando Lsblk in Linux (Elenca dispositivi a blocchi)

Come bloccare una porta utilizzando un firewall in Linux

Come controllare i blocchi danneggiati o i settori danneggiati sul disco rigido in Linux

Come crittografare i dispositivi a blocchi utilizzando LUKS su Linux