Finché scrivi il tuo codice in modo portabile (non usando funzionalità specifiche del sistema operativo/compilatore come windows.h
o specifiche estensioni del compilatore) e usa librerie portatili che dovrebbe essere compilato sia con Visual Studio che con GCC.
Il fatto è che mentre entrambi funzionano, lo fanno in modo leggermente diverso. Principalmente si tratta di impostazioni predefinite diverse, che potresti dover sovrascrivere in modo esplicito. Ad esempio:
-
Visual Studio 2017 e versioni successive hanno come impostazione predefinita C++14. Usa l'opzione /std per specificare uno standard diverso.
-
GCC ha un set predefinito, ma ti permette di cambiare lo standard che usi per la compilazione. Compilazione con
g++ example.cpp
utilizza lo standard predefinito (standard C++98 per GCC prima della versione 6 e C++14 per GCC dopo la versione 6). Il tuo codice sembra non riuscire perché utilizzi le funzionalità C++ 11 ma il tuo compilatore utilizza uno standard precedente per impostazione predefinita.
g++ -std=c++11 example.cpp
dovrebbe far sparire alcuni dei tuoi errori specificando esplicitamente lo standard, in questo caso lo standard C++11.
Questi sono solo compromessi diversi scelti dai compilatori. Avere un solo standard supportato probabilmente rende più facile il supporto e la correzione degli errori, dal momento che non hai diverse combinazioni di compilatore + versione standard che potrebbero avere bug diversi. La possibilità di cambiare lo standard utilizzato per la compilazione rende più semplice verificare se un programma funziona bene con un nuovo standard o quali modifiche sostanziali devi correggere, ecc...
In generale GCC è più minimale e devi specificarlo esplicitamente se vuoi che faccia qualcosa in più. Consiglierei di usare qualcosa come:
g++ -Wall -Wextra -pedantic -std=c++11 example.cpp
Usando -Wall
e -Wextra
dare un livello di avviso decente per iniziare con -pedantic
ti dice se stai cercando di usare un'estensione del compilatore che funziona ma renderebbe il tuo codice meno portabile, e ultimo ma non meno importante dovresti sempre specificare lo standard che vuoi usare, sia esso -std=c++11
, -std=c++14
o il vecchio -std=c++98
.
Potresti anche provare la possibilità di sviluppo e debug remoto utilizzando VS 2015 e l'estensione Linux Development.Visual C++ per Linux Development (30 marzo 2016)