Tabla de Contenido
Últimamente me he decidido a actualizar phoxonics. Un sistema hecho en C++ utilizado para crear simulaciones del campo electromagnético mediante el método FDTD. Para tal cuestión he tenido que hacer una mini investigación para ver que compiladores tengo disponible en mi sistema actual y que soporte tienen de C++ moderno.
Debian Stretch Linux
Primero se muestra la versión de mi sistema Debian con los siguientes comandos
1. Muestra la versión mayor actual
cat /etc/issue Debian GNU/Linux 9 \n \l
2. Muestra la versión del sistema operativo
cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 9 (stretch)" NAME="Debian GNU/Linux" VERSION_ID="9" VERSION="9 (stretch)" ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/"
3. Versión actual de Debian junto con la versión menor
cat /etc/debian_version 9.5
g++/gcc
A continuación se muestra la versión de g++/gcc para mi sistema Debian Stretch
g++ -v Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/6/lto-wrapper Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Debian 6.3.0-18+deb9u1' --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-6 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)
Con este comando se puede apreciar que se tiene instalada la versión 6.3.0 de GCC. A continuación se agrega un enlace donde se describe el soporte de la versión que se tiene para C++. Prácticamente están soportadas todas las versiones de C++ hasta la versión 17. Para mas detalles consulta https://www.gnu.org/software/gcc/projects/cxx-status.html
Diferencias entre g++ y gcc
Me pareció un tópico interesante el tener presente las diferencias entre estas 2 entidades.
GCC: GNU Compiler Collection, Referrers to all the different languages that are supported by the GNU compiler.
gcc: GNU C Compiler
g++: GNU C++ CompilerThe main differences:
gcc will compile: .c/.cpp files as C and C++ respectively.
g++ will compile: .c/.cpp files but they will all be treated as C++ files.
Also if you use g++ to link the object files it automatically links in the std C++ libraries (gcc does not do this).
gcc compiling C files has less predefined macros.
gcc compiling .cpp and g++ compiling *.c/.cpp files has a few extra macros.Referencia: https://coderwall.com/p/fq5jlg/what-is-the-difference-between-g-and-gcc
clang
Ahora se procede a verificar la versión de clang para desarrollo de C++ con el siguiente comando
clang --version clang version 3.8.1-24 (tags/RELEASE_381/final) Target: x86_64-pc-linux-gnu Thread model: posix InstalledDir: /usr/bin
Se puede apreciar que se tiene la versión 3.8.1 para ver los detalles de que características soporta esta versión de clang podemos consultar https://clang.llvm.org/cxx_status.html pero básicamente se resume a soportar todas las versiones hasta C++ 17 por lo cual estamos bien con las versiones que tiene por default Debian
¡Saludos! 😀
-Yohan