Versiones g++/gcc y clang para Desarrollo de C++ 17 en Debian

Ú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++ Compiler

The 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

Leave a Reply

Your email address will not be published. Required fields are marked *