Building GCC 10 on Windows Subsystem for Linux
Posted on May 4, 2017 by Paul
Updated 8 May 2020
In this article, I will show you how to compile from sources GCC 10.1 on WSL, Windows Subsystem for Linux with Ubuntu 20.04. The default version of GCC, at the time of this writing, is 9.3. GCC 10.1 has complete support for C++11, C++14, C++17 and partial support for C++20.
GCC 10.1 has C++14 support enabled by default. If you want to try the new C++17 support use the -std=c++17 flag, example:
I assume that you have a working and updated WSL installation on your Windows 10 machine. If this is not the case, check my previous article.
First, start WSL, use the Ubuntu 20.04 application console or write ubuntu2004 in a Command Prompt window. Let’s make sure that you have an up to date system, start WSL and write:
Now, install the default GCC toolchain and a few extra utilities with:
Next, download the GCC 10 source and prerequisites from http://gcc.gnu.org/mirrors.html:
At this point, we can configure the build. In order to keep the system clean, we will use /usr/local/gcc-10.1.0 for the installation folder and append the suffix -10.1 to the GCC compilers. You typically don’t want to mess the system’s default GCC because other packages may depend on this.
Now, we are ready to build GCC, you typically want to pass twice the number of your computer cores to the make command in order to speed up the build. I have a quad-core system, so I will use 8 parallel jobs to build GCC:
Depending on the speed of your computer the build phase could take from about 30 minutes to a few hours.
Once the above phase is finished, you can install the built GCC with:
If you want to permanently add the compilers to your system’s path, use the next commands:
the above will append the path to GCC 10.1 at the end of your .bashrc file.
Time to test our shiny new compilers. Open your favorite text editor and copy the next piece of code (I assume you’ll save the file as test_lambda.cpp):
The code uses a generalized lambda (we could use auto for the type of the parameters), this was introduced in the C++14 standard. We can compile and test the above program with:
As mentioned at the beginning of this article, GCC 10.1 has complete support for the last C++17 standard. Let’s test an example of using C++17 modification to static_assert:
You can compile the above code if you pass std=c++17 to the compiler and you should get a compiler error triggered by lines 14 and 20 from the above code
If you are a Fortran programmer, you can use some of the Fortran 2008 features like do concurrent with gfortran-10.1:
The above code can be compiled with (supposing you’ve named it test_concurrent_do.f90s):
If you are interested in learning more about the new C++11 syntax I would recommend reading The C++ Programming Language by Bjarne Stroustrup.
or, Professional C++ by M. Gregoire, N. A. Solter, S. J. Kleper 4th edition:
If you need to brush your Fortran knowledge a good book is Modern Fortran Explained by M. Metcalf, J. Reid and M. Cohen: