Pagine    Articoli    Prodotti    Forum    Cerca  
Nickname

Password


Non sei registrato?
Registrati a GPI qui!

Puoi anche attivare un vecchio utente GPI e chiedere una nuova password.
I Team

Mappa Team
I nostri utenti

Mappa Utenti
  C++11: Installazione
Pubblicato da Dario Oliveri il 2013-03-15 09:12:12

Problemi con std::thread? ( in particolare hai l'errore "std::thread not found in namespace std") Prova l'installazione generica del C++11 (QUI)

 

Prima di tutto è necessario scegliere un compilatore e un IDE che supportino il C++ 11 in maniera decente, guardando alla matrice delle features implementate il compilatore GCC è il più adatto allo scopo (senza contare che GCC è da sempre stato più attento agli standard rispetto a varie alternative):

(matrice comparativa dei compilatori)

 

In quanto agli IDE be, il più facile da configurare è senz'altro code::blocks. E' sufficiente scaricare l'installer più recente (tralaltro è uscita da poco la nuova release.. finalmente!). Altre alternative esistono e sono peraltro validissime (resta tutta via il fatto che avere un installazione C++11 funzionante su Windows è piuttosto difficile).

Download Page di Code::blocks

 

Installazione facile:

E' sufficiente installare
codeblocks-12.11mingw-setup.exe (per windows, servono requisiti di amministratore di sistema)

 

oppure:

codeblocks-12.11mingw-setup_user.exe (per windows, non servono i diritti di amministrazione e permette l'installazione solo in cartelle con il permesso di scrittura dei file. Utile per installare su chiavette o dischi esterni anche senza essere amministratori).

 

Per altri sistemi operativi, non serve installare mingw. Trovate comunque la lista dei packages alla pagina di download.

Configurare il vostro progetto:

 

Andate a pescarvi le build options, e aggiungete il flag -std=c++0x:

Consiglio inoltre di aggiungere anche -Wall e -Wextra. Abilitando i warnings troverete un sacco di bugs, senza contare che scriverete codice più vicino agli standards. Scrivere codice che compila senza warnings è sempre una buona cosa: se ci sono troppi warning, rischierete di non notare i warning davvero importanti (quelli che nascondono bugs per intenderci, mentre tutti gli altri warning POSSONO e DOVREBBERO essere fixati in qualche modo)

Installazione avanzata:

Il vantaggio dell'installazione semplice è che permette di usare GCC 4.7 che è la versione più stabile (bel miglioramento visto che l'ultimo installer forniva GCC 4.4 e comunque ci sono persone che ancora utilizzano GCC 3.x)

 

Con l'installazione avanzata potrete invece utilizzare il compilatore di vostra scelta ( si presume sappiate già in parte quello che state facendo visto che utilizzare installazioni multiple di compilatori vari può causare parecchi problemi a causa di sviste).

 

In pratica bisogna andare a settare un link ad ognuno dei componenti della toolchain:

Ognuno di quei file lo trovate dentro la cartella "bin" della vostra installazione di GCC (in caso non usiate GCC dovrete cercare i nomi equivalenti della vostra toolchain).

L'unico modo per vedere se avete fatto tutto correttamente è provare a creare un "hello world" e farlo partire.
Per vedere se anche il linker funziona, vi conviene provare a creare e utilizzare una libreria statica e una dinamica.
Per il debugger idem, fate un break point su hello world e vedete se si ferma sul "cout".

Finito questo ricordatevi di configurare il vostro progetto mettendo "-std=c++0x" (come già detto sopra). Altrimenti non potrete utilizzare le nuove features del c++11.

 

Importante: quando dovrete scegliere un GCC package scegliete la versione sjlj (non quella dwarf-2, che in caso di eccezioni del sistema operativo causerà il crash dell'applicazione, visto che non permette di gestire le eccezioni di windows).

 

Un buon package è il seguente:
mingwbuilds/host-windows/releases/4.8.0/32-bit/threads-posix/sjlj/lastRelease

 

(ha quasi tutte le features del C++11 e in aggiunta è già compilato con il supporto per le API POSIX, permettendo quindi di utilizzare std::thread e std::mutex, che altrimenti non saranno disponibili).

 

Per gli utenti VisualStudio:
Non tutte le feature sono abilitate in VisualStudio pertanto può capitare che del codice che compila su GCC non compili su VS. Un altro compilatore con un buon supporto per C++11 è Clang. (anche GCC non è completo, ma comunque è più completo di Visual Studio).

 

Hello World :

#include < iostream >

// uno struct point. Normalissimo.
struct Point {
    Point() {}
    Point(int xx, int yy): x(xx), y(yy) {}
    int x, y;
};

//Unione
union U {
    double w;
    Point p; //in C++03 non è ammesso.
    U(int x, int y):p(x,y) { } // costruttore degli unioni! figata
};

constexpr int factorial(int N){
    return N==0?1:factorial(N-1)*(N);
}


template < int n >
struct SomeValue{
    SomeValue(){
        std::cout << "Compile Time Constant" << n << std::endl;
    }
};

int main(){
	const U p1(0,2);

    // I templates accettano solo valori noti a compile time
    SomeValue < factorial(3) > value1(); //SomeValue < 6 >

    std::cout << "HelloWorld!" << std::endl;
    return 0;
}

 

 

Con questo codice d'esempio potrete vedere se il vostro compilatore supporta già alcune features del C++11 (in caso contrario si rifiuterà di compilare il codice, su GCC 4.7.2 comunque non avrete questo problema).

 

 

 

Campagne crowfunding

Just One Line
Siamo presenti su

     
Copyright ©2016 - Manifesto - Privacy - Termini di Servizio - Community - Collaboratori - Contattaci