A beginner’s guide to install gcc and g++ compiler on windows 10

4- Installing GCC and other development tools with the pacman package management system

Then you can start to install gcc and other developer tools using pacman like this:

# Install make, autoconf, etc to C:\msys64\usr\bin
pacman -S base-devel gcc vim cmake

This command will install first a set of development software included in a package called base-devel and then it will install gcc, vim and cmake

vim is optional, but always good to have 😉
(You can also install emacs very easily in the same way)

In the package base-devel, you have 53 useful developement tools that can be installed:

# pacman -S base-devel
   1) asciidoc  2) autoconf  3) autoconf2.13  4) autogen  5) automake-wrapper
   6) automake1.10  7) automake1.11  8) automake1.12  9) automake1.13
   10) automake1.14  11) automake1.15  12) automake1.16  13) automake1.6
   14) automake1.7  15) automake1.8  16) automake1.9  17) bison  18) diffstat
   19) diffutils  20) dos2unix  21) file  22) flex  23) gawk  24) gdb
   25) gettext  26) gettext-devel  27) gperf  28) grep  29) groff  30) help2man
   31) intltool  32) lemon  33) libtool  34) libunrar  35) libunrar-devel
   36) m4  37) make  38) man-db  39) pacman  40) pactoys-git  41) patch
   42) patchutils  43) perl  44) pkg-config  45) pkgfile  46) quilt  47) rcs
   48) scons  49) sed  50) swig  51) texinfo  52) texinfo-tex  53) ttyrec

# pacman -S gcc
   binutils-2.30-1  isl-0.19-1  mpc-1.1.0-1
   windows-default-manifest-6.4-1  gcc-7.3.0-3

Set a watch

Sometimes you might want to keep track of the value of a variable as your program executes. You can do this by setting a watch on the variable.

  1. Place the insertion point inside the loop. In the Watch window, click the plus sign and in the text box, type , which is the name of the loop variable. Now view the Watch window as you step through the loop.

  2. Add another watch by adding this statement before the loop: . Then, inside the loop, add this statement: . Now add a watch for as you did in the previous step.

  3. To quickly view the value of any variable while execution is paused on a breakpoint, you can hover over it with the mouse pointer.

Pre-built toolchains and packages

Version Host GCC / Mingw-w64 Version Languages Additional Software in Package Manager
Arch Linux Ada, C, C++, Fortran, Obj-C, Obj-C++ many
Rolling Windows 5.4.0/5.0.2 Ada, C, C++, Fortran, Obj-C 5 (bzip2, libgcrypt, libgpg-error, minizip, xz, zlib)
Debian 7 (Wheezy) 4.6.3/2.0.3 Ada, C, C++, Fortran, Obj-C, Obj-C++, OCaml 2 (gdb, nsis)
Debian 8 (Jessie) 4.9.1/3.2.0
Debian 9 (Stretch) 6.3.0/5.0.0 9 (gdb, libassuan, libgcrypt, libgpg-error, libksba, libnpth, nsis, win-iconv, zlib)
Debian 10 (Buster) 8.3.0/6.0.0
Fedora 19 4.8.1/? Ada, C, C++, Fortran, Obj-C, Obj-C++ 149+
20210423 Windows, Linux LLVM 12.0.0/trunk C, C++ make
Rolling macOS C, C++, Fortran, Obj-C, Obj-C++ 1 (nsis)
Rolling Windows 7.2.0/5.0.3 C, C++, Fortran 4 (gdb, libiconf, python, zlib)
Rolling Windows Ada, C, C++, Fortran, Obj-C, Obj-C++, OCaml many
12.04 Precise Pangolin 4.6.3/2.0.1 Ada, C, C++, Fortran, Obj-C, Obj-C++, OCaml 2 (nsis, gdb)
14.04 Trusty Tahr 4.8.2/3.1.0
14.10 Utopic Unicorn 4.9.1/3.1.0
15.04 Vivid Vervet 4.9.2/3.2.0
15.10 Wily Werewolf 4.9.2/4.0.2
16.04 Xenial Xerus 5.3.1/4.0.4 3 (nsis, gdb, zlib)
1.5 Windows, Linux 4.8.3/3.3.0 C, C++ 91+


  • Community repository (toolchain)
  • AUR repository (additional packages)


Cygwin is a Unix-like environment and command-line
interface for Microsoft Windows. Its core is the cygwin1.dll library which
provides POSIX functionality on top of the Win32 API. It can be used as a build
environment which targets Windows directly and for which output doesn’t depend
on cygwin1.dll.

Installation is done through cygwin’s package manager:

As part of the numerous packages in cygwin, there are cross-compilation
toolchains which target both 32 bits and 64 bits; their names start with

Once they are installed, they should be used according to the general
cross-compilation approach.


LLVM-MinGW is a toolchain built with Clang, LLD, libc++, targeting
i686, x86_64, arm and aarch64 (ARM64), with releases both for running
as a cross compiler from Linux and for running on Windows. It supports
Address Sanitizer, Undefined Behaviour Sanitizer, and generating debug
info in PDB format.


To install just the 32-bit or just 64-bit compiler with dependencies, use:

A shortcut to install both:

Here is the list of Mingw-w64 packages on MacPorts.


Win-builds is a cross-platform project that makes building for Windows easy. It
supports building from both Windows and Linux systems and provides many
pre-built libraries which can be installed through a graphical package manager.

It aims for stability while still providing recent versions of software

Installation: http://win-builds.org.

Составляем отчёт о Code Coverage с помощью lcov

После предыдущего шага у нас есть всё, что надо для lcov, и теперь стало намного проще! Введите в терминале команду lcov с несколькими опциями:

Пояснения по поводу опций:

  • устанавливает имя отчёта, при измерении покрытия кода тестами можно указать имя теста или набора тестов
  • устанавливает имя выходного файла с промежуточной информацией
  • указывает, что lcov должен использовать существующие данные о coverage
  • устанавливает каталог, в котором надо искать данные о coverage, и мы передаём текущий каталог “.”

Теперь можно сгенерировать отчёт в виде HTML-страницы с помощью утилиты , входящей в состав пакета программ lcov:

Теперь вы можете перейти в каталог , открыть файл в браузере и посмотреть отчёт. Вы увидите страницу, на которой показан статичный отчёт о покрытии различных каталогов, и можно перейти по ссылкам для просмотра отдельных каталогов:

Вы можете перейти к конкретному файлу и посмотреть покрытие этого файла:

1- What I want to teach you here

If you want a simple way to create programs based on C, C++, Fortran, etc… you will have to install a software with can compile the code you write into code that the machine understands

Such program is called a “compiler”

The most well know compiler for C language is the GNU compiler called GCC.

There are actually several compilers which go together like a suite:

  • for C++, you have the compiler  g++
  • for Fortran, the compiler is called gfortran

Why using the gcc compiler?

If you are on Windows, you probably heard about software such as visual studio from Microsoft which also you to write and compile C and C++ code as well.

That’s true, and it’s totally fine if you want to use it…

I am personally not such a big fan of Visual Studio because of the following reasons:

  • It is huge to download and install (between 10 and 20 GB if I remember)
  • It’s a big pain to set up the first time
  • Building even a very simple project takes much more time than it should

Because of that, I find that I kind of takes out the fun of programming and seeing immediately the result of what you did…

Now, for large pieces of software, visual studio is probably the way to go

Installing other packages with pacman

If you want to compile an SSL program that links to libssl and libcrypto with -lssl -lcrypto you will need to install openssl-devel as shown below. There are many other devel packages. For example, libbz2-devel, libelf-devel, libunrar-devel, and libyaml-devel. The environment is rather limited, but it can be useful for learning.

Packages included in «development» group:

You also have a ton of other packages available via the pacman package manager. View the full list of options at https://github.com/msys2/msys2/wiki/Packages, or use the command below to search

Packages prefixed with msys/ will be installed to the C:\msys64\usr\ environment. Some packages are prefixed with mingw64. Those are installed to C:\msys64\mingw64\ environment.

Debug helloworld.cpp

Next, you’ll create a file to configure VS Code to launch the GDB debugger when you press F5 to debug the program.

  1. From the main menu, choose Run > Add Configuration… and then choose C++ (GDB/LLDB).
  2. You’ll then see a dropdown for various predefined debugging configurations. Choose g++.exe build and debug active file.

VS Code creates a file, opens it in the editor, and builds and runs ‘helloworld’.

The setting specifies the program you want to debug. Here it is set to the active file folder and active filename with the extension , which if is the active file will be .

By default, the C++ extension won’t add any breakpoints to your source code and the value is set to .

Change the value to to cause the debugger to stop on the method when you start debugging.

Start a debugging session

  1. Go back to so that it is the active file.
  2. Press F5 or from the main menu choose Run > Start Debugging. Before you start stepping through the source code, let’s take a moment to notice several changes in the user interface:
  • The Integrated Terminal appears at the bottom of the source code editor. In the Debug Output tab, you see output that indicates the debugger is up and running.

  • The editor highlights the first statement in the method. This is a breakpoint that the C++ extension automatically sets for you:

  • The Run view on the left shows debugging information. You’ll see an example later in the tutorial.

  • At the top of the code editor, a debugging control panel appears. You can move this around the screen by grabbing the dots on the left side.

C/C++ configurations

If you want more control over the C/C++ extension, you can create a file, which will allow you to change settings such as the path to the compiler, include paths, C++ standard (default is C++17), and more.

You can view the C/C++ configuration UI by running the command C/C++: Edit Configurations (UI) from the Command Palette (⇧⌘P (Windows, Linux Ctrl+Shift+P)).

This opens the C/C++ Configurations page. When you make changes here, VS Code writes them to a file called in the folder.

Here, we’ve changed the Configuration name to GCC, set the Compiler path dropdown to the g++ compiler, and the IntelliSense mode to match the compiler (gcc-x64)

Visual Studio Code places these settings in . If you open that file directly, it should look something like this:

You only need to add to the Include path array setting if your program includes header files that are not in your workspace or in the standard library path.

Compiler path

The extension uses the setting to infer the path to the C++ standard library header files. When the extension knows where to find those files, it can provide features like smart completions and Go to Definition navigation.

The C/C++ extension attempts to populate with the default compiler location based on what it finds on your system. The extension looks in several common compiler locations.

The search order is:

  • First check for the Microsoft Visual C++ compiler
  • Then look for g++ on Windows Subsystem for Linux (WSL)
  • Then g++ for Mingw-w64.

If you have Visual Studio or WSL installed, you may need to change to match the preferred compiler for your project. For example, if you installed Mingw-w64 version 8.1.0 using the i686 architecture, Win32 threading, and sjlj exception handling install options, the path would look like this: .


GCC компилирует Hello World в Windows

Семейства целевых процессоров GCC, начиная с версии 11.1, включают:

  • Альфа
  • РУКА
  • AVR
  • Blackfin
  • (GCC 4.8)
  • H8 / 300
  • HC12
  • IA-32 ( x86 )
  • IA-64 (Intel Itanium)
  • MIPS
  • Motorola 68000
  • PDP-11
  • PowerPC
  • R8C / M16C / M32C
  • SuperH
  • Система / 390 / zSeries
  • VAX
  • x86-64
  • Графический процессор Nvidia
  • Nvidia PTX
  • AArch64
  • RISC-V
  • MSP430
  • eBPF

Менее известные целевые процессоры, поддерживаемые в стандартной версии, включают:

  • 68HC11
  • A29K
  • CR16
  • C6x
  • D30V
  • DSP16xx
  • FR-30
  • FR-V
  • Intel i960
  • IP2000
  • M32R
  • MIL-STD-1750A
  • MMIX
  • MN10200
  • MN10300
  • Motorola 88000
  • NS32K
  • RL78
  • Бурный16
  • V850
  • Xtensa

Дополнительные процессоры поддерживаются версиями GCC, поддерживаемыми отдельно от версии FSF:

  • Cortus APS3
  • ARC
  • AVR32
  • C166 и C167
  • D10V
  • EISC
  • eSi-RISC
  • Шестиугольник
  • Решетка
  • Решетка
  • MeP
  • MicroBlaze
  • Motorola 6809
  • MSP430
  • Архитектура NEC SX
  • Ниос II и Ниос
  • OpenRISC
  • PDP-10
  • Пропеллер
  • Сатурн (HP48XGCC)
  • Система / 370
  • TIGCC ( вариант m68k )
  • TMS9900
  • TriCore
  • Z8000
  • ЗПУ

GCJ компилятор Java может выбрать либо родной язык архитектуры машины или виртуальной машины Java «s Java байткод . При перенацеливании GCC на новую платформу часто используется самозагрузка . Motorola 68000, Zilog Z80 и другие процессоры также используются в версиях GCC, разработанных для различных программируемых графических калькуляторов Texas Instruments, Hewlett Packard, Sharp и Casio.

Quick Start: Unix

Prerequisites for Linux:

  • >= 6

Prerequisites for macOS:

  • On macOS 10.14 or below, you will also need:
    • >= 6 from Homebrew

First, download and bootstrap vcpkg itself; it can be installed anywhere,
but generally we recommend using vcpkg as a submodule for CMake projects.

$ git clone https://github.com/microsoft/vcpkg
$ ./vcpkg/bootstrap-vcpkg.sh

To install the libraries for your project, run:

$ ./vcpkg/vcpkg install 

You can also search for the libraries you need with the subcommand:

$ ./vcpkg/vcpkg search 

In order to use vcpkg with CMake, you can use the toolchain file:

$ cmake -B  -S . -DCMAKE_TOOLCHAIN_FILE=/scripts/buildsystems/vcpkg.cmake
$ cmake --build 

With CMake, you will still need to and the like to use the libraries.
Check out the
for more information on how best to use vcpkg with CMake,
and CMake Tools for VSCode.

For any other tools, check out the integration guide.

Компилятор GCC. Первая программа на Windows

Последнее обновление: 18.05.2017

Для создания программ на Си необходим текстовый редактор, с помощью которого можно набрать исходный код. И также необходим компилятор,
который принимает файл с исходным кодом на Си и компилирует его в исполняемый файл.

При запуске установщика откроется следующее окно:

Нажмем на кнопку Next > и перейдем к следующему шагу:

Если версия ОС 64-битная, то в поле следует выбрать пункт x86_64. Остальные настройки
оставим по умолчанию и нажмем на кнопку Next >. На следующем шаге укажем путь, по которому будет устанавливаться пакет:

Можно оставить настройки по умолчанию. И после перехода к следующему шагу собственно начнется установка.

После завершения установки на жестком диске по пути, которое было выбрано для установки, появятся все необходимые файлы компиляторов.
В моем случае они находятся по пути C:\Program Files (x86)\mingw-w64\i686-7.1.0-posix-dwarf-rt_v5-rev0\mingw32\bin:

В зависимости от версии пакета точный путь может отличаться, но в любом случае все файлы будут располагаться по тому пути, который был указан на шаге установки.

В частности, файл gcc.exe как раз и будет представлять компилятор для языка Си.

Далее для упрощения запуска компилятора мы можем добавить путь к нему в Переменные среды. Для этого перейдем к окну
Система -> Дополнительные параметры системы -> Переменные среды:

И добавим путь к компилятору:

Итак, компилятор установлен, и теперь мы можем написать первую программу. Для этого потребуется любой текстовый редактор для набора исходного кода.
Можно взять распространенный редактор Notepad++ или даже обычный встроенный Блокнот.

Итак, создадим на жестком диске папку для исходных файлов. А в этой папке создадим новый файл, который назовем hello.c.

В моем случае файл hello.c находится в папке C:\c.

Теперь определим в файле hello.c простейший код, который будет выводить строку на консоль:

#include <stdio.h>		// подключаем заголовочный файл stdio.h
int main(void)					// определяем функцию main
{								// начало функции
	printf("Hello World! \n");	// выводим строку на консоль
	return 0;					// выходим из функции
}								// конец функции

Для вывода строки на консоль необходимо подключить нужный функционал. Для этого в начале файла идет строка

#include <stdio.h>

Директива include подключает заголовочный файл stdio.h, который содержит определение функции printf, которая нужна для вывода строки на консоль.

Далее идет определение функции int main(void). Функция main должна присутствовать в любой программе на Си, с нее собственно и начинается
выполнение приложения.

Ключевое слово int в определении функции говорит о том, что функция возвращает целое число.
А слово void в скобках указывает, что функция не принимает параметров.

Тело функции main заключено в фигурные скобки {}. В теле функции происходит вывод строки на консоль с помощью функции printf, в которую передается выводимая строка «Hello world!».

В конце осуществляем выход из функции с помощью оператора return. Так как функция должна возвращать целое число, то после return указывается число 0.
Ноль используется в качестве индикатора успешного завершения программы.

После каждого действия в функции ставятся точка с запятой.

Теперь скомпилируем этот файл. Для этого откроем командную строку Windows и вначале с помощью команды cd перейдем к папке с исходным файлом:

cd C:\c

Чтобы скомпилировать исходный код, необходимо компилятору gcc передать в качестве параметра файл hello.c:

gcc hello.c

После этого будет скомпилирован исполняемый файл, который в Windows по умолчанию называется a.exe. И мы можем обратиться к этому файлу, и в этом случае консоль выведет
строку «Hello World!», собственно как и прописано в коде.


Install Cygwin

First, download and run either the 32- or 64-bit version of the Cygwin installer, depending on your version of Windows. Cygwin’s setup wizard will walk you through a series of steps. If your machine is located behind a proxy server, make sure to check “Use Internet Explorer Proxy Settings” when you get to the “Select Your Internet Connection” step.

When you reach the “Select Packages” step (shown below), don’t bother selecting any packages yet. Just go ahead and click Next. We’ll add additional packages from the command line later.

After the Cygwin installer completes, it’s very important to keep the installer around. The installer is an executable named either or , and you’ll need it to add or remove Cygwin packages in the future. I suggest moving the installer to the same folder where you installed Cygwin itself; typically or .

If you already have Cygwin installed, it’s a good idea to re-run the installer to make sure it has the latest available packages. Alternatively, you can install a new instance of Cygwin in a different folder.

Отчёт о покрытии ветвлений

Для получения отчёта с информацией о выборе ветвлений надо добавить параметр как для вызова , так и для вызова :

Теперь вы можете повторно открыть и познакомиться с новой информацией. Знаки возле означают, что программа ни разу не зашла в первую ветку (ветку then), но заходила во вторую (ветку else). В остальных ветвлениях if/else программа заходила в разное время в обе ветки.

У любопытных людей может возникнуть вопрос: почему в конце функции main тоже написано ? Это правильный вопрос, детектив. Дело в том, что каждая функция может быть завершена либо нормальным способом (вернув что-либо на инструкции return), либо выбросом исключения. Если немного модифицировать программу, написав всегда бросающую исключение функцию , то branch coverage для вызова изменится на : функция ни разу не завершилась нормально, но как минимум один раз завершилась с выбросом исключения:

Step 2: Download MinGW Package Installer

Fire up your browser again and follow the steps —

  • Click on Download Installer in the upper right corner of the page.
  • A new page will pop up and the download will start after some seconds. The downloaded file name will be «mingw-get-setup.exe»
  • Open the installer and click on Install.
  • Don’t change the installation directory. leave it as it is and just click on continue.
  • Download will start within the installer. So be patient and wait for it to complete. You can see the percentage there in the right hand box. When it’s done click on continue.
  • «MinGW Installation Manager» will open. There you can find all the packages. For our purpose check the «mingw32-gcc-g++» package and click on installation in the upper left corner.
  • Click on apply changes and click on apply. The installation will start and it will take some time. When it is done and it displays » all changes were applied successfully. » then click on close.

To confirm that everything is done correctly just go to c:\MinGW\bin

There you should find both G++ and Gcc compiler. If not redo this process.

Описание и рекомендации

Code::Blocks – интегрированная среда разработки (IDE) для создания программных продуктов на языках C, C++, Fortran. Система полностью конфигурируема, масштабируется подключением автономных модулей (плагинов).

Продукт распространяется по лицензии GNU – бесплатно, с открытым исходным кодом. Интерфейс CodeBlocks англоязычный, официальная версия на русском отсутствует.

Разновидности интегрированной среды

Инсталляторы Code::Blocks отличаются не только поддержкой различных ОС.

Разработчики предлагают несколько видов установщика для Windows:

  • полный пакет, БЕЗ компилятора, но включающий все плагины;
  • non admin – версия для пользователей, не имеющих прав администратора на компьютере;
  • no setup – редакция, функционирующая без инсталляции;
  • издание, содержащее дополнительный GCC компилятор и средства отладки под MinGW-проекты.

Все установщики имеют отдельные релизы для архитектуры 32-bit. Инсталляторы без маркировки разрядности выпущены под системы 64-bit. Важный нюанс, Portable выпуск Code::Blocks можно скачать в двух вариациях. Один архив содержит компилятор MinGW, второй – нет. Аналогичная ситуация с инсталлятором для полной редакции.

CodeBlocks с компилятором C/C++

Интегрированная среда содержит инструменты отладки и перевода программных строк в машинный код.

Версия IDE с компилятором C может включать несколько модулей от различных разработчиков:

  • MinGW;
  • Microsoft Visual C++;
  • Digital Mars;
  • Watcom;
  • Borland C++;
  • CDCC – плагин под микроконтроллеры;
  • Intel C++;
  • Clang.

Дополнительно в IDE может присутствовать компилятор Digital Mars D, инструменты для создания исполняемых файлов с кода на языках программирования Fortran, GDC, а также архитектуры ARM. Допускается импорт проектов Microsoft Visual Studio, Dev-C++.

Отладка и интерфейс

Среда поддерживает инструмент GDB (проект GNU) и стандартный дебаггер всех выпусков Microsoft Visual Studio (MS CDB). Визуализация результатов отладки осуществляется через GNU-профайлер.

При программировании на языке Си, Code::Blocks предлагает воспользоваться инструментом RAD – для быстрой разработки приложений. Это методика наглядного создания пакетов с графическим интерфейсом.

CodeBlocks и русский язык

Официальной версии IDE на русском с компилятором или без него не существует. Это неудивительно, поскольку навыки программирования предполагают знание базовых команд меню на английском.

Дальнейшая инструкция реализуется в 8 шагов:

  1. Зайти в корневую директорию программы.
  2. Последовательно открыть подкаталоги share, CodeBlocks.
  3. Извлечь файл русификатора из архива внутрь каталога, общий путь к файлу будет выглядеть примерно так
    C:\Program Files\CodeBlocks\share\CodeBlocks\locale\ru_RU\codeblocks.mo
  4. Открыть IDE.
  5. В главном меню последовательно выбрать пункты Settings, Environment.
  6. В открывшемся окне перейти на вкладку View.
  7. Отметить пункт Internationalization.
  8. В активизировавшемся выпадающем меню, расположенном напротив, выбрать Russian.

Чтобы изменения вступили в силу требуется перезапустить среду. Пакет откроется с русскоязычным интерфейсом.

Unsorted complementary list

Darwin/Mac OS X

The existing Darwin binaries have been built through buildbot in 2013 and links
to them can be found on the dedicated


Rubenvb has built a number of toolchains including some for less common setups.
They are split into two categories: toolchains targeting

GCC with the MCF thread model

GCC with the MCF thread model is a series of x86
and x64 native toolchains built by LH_Mouse. The MCF thread model involves the
mcfgthread library to provide minimum
yet complete C++11 thread support. Disregarding POSIX or Windows XP
compatibility, it implements (hopefully the most) efficient mutexes and
condition variables that are competitive with even native slim reader/write
(SRW) locks and condition variables since Windows Vista.

Store of binaries on SourceForge

A very large number of other binaries and sources are hosted in the File
Release System on Sourceforge which
might have what you are after.

Linux 32 and 64-bit

Distro File Download from
codeblocks_20.03_amd64_oldstable.tar.xz FossHUB or Sourceforge.net
codeblocks_20.03_i386_oldstable.tar.xz FossHUB or Sourceforge.net
codeblocks_20.03_amd64_stable.tar.xz FossHUB or Sourceforge.net
codeblocks_20.03_i386_stable.tar.xz FossHUB or Sourceforge.net
codeblocks-20.03-1.el6.rmps.tar FossHUB or Sourceforge.net
codeblocks-20.03-1.el7.rmps.tar FossHUB or Sourceforge.net
For Ubuntu, use this PPA

Note: The Linux packages above are compressed archives (tar, tar.xz or tar.bz2). When you decompress the package you downloaded on your system, you will find all the .rpm or .deb packages required to install Code::Blocks.

Note: On RedHat/CentOS older revisions of 6 (up to 6.2 as far as we know) you need to add repoforge (former rpmforge) to your repolist, to be able to install the needed wxGTK-package. See http://repoforge.org/use for an instruction.

Note: Redhat/CentOS probably also needs an installed hunspell-package, if you want to install the contrib-plugins.

The Build

We build a toolset running on your host that can turn source code into object files for your target system.

You need to decide where to install your new compiler. It is dangerous and a very bad idea to install it into system directories. You also need to decide whether the new compiler should be installed globally or just for you. If you want to install it just for you (recommended), installing into $HOME/opt/cross is normally a good idea. If you want to install it globally, installing it into /usr/local/cross is normally a good idea.

Please note that we build everything out of the source directory tree, as is considered good practice. Some packages only support building outside, some only inside and some both (but may not offer extensive checking with make). Building GCC inside the source directory tree fails miserably, at least for older versions.


export PREFIX="$HOME/opt/cross"
export TARGET=i686-elf
export PATH="$PREFIX/bin:$PATH"

We add the installation prefix to the PATH of the current shell session. This ensures that the compiler build is able to detect our new binutils once we have built them.

The prefix will configure the build process so that all the files of your cross-compiler environment end up in $HOME/opt/cross. You can change that prefix to whatever you like (e.g., /opt/cross or $HOME/cross would be options). If you have administrator access and wish to make the cross-compiler toolchain available to all users, you can install it into the /usr/local prefix — or perhaps a /usr/local/cross prefix if you are willing to change the system configuration such that this directory is in the search paths for all users. Technically, you could even install directly to /usr, so that your cross-compiler would reside alongside your system compiler, but that is not recommended for several reasons (like risking to overwrite your system compiler if you get TARGET wrong, or getting into conflict with your system’s package management).


cd $HOMEsrc
mkdir build-binutils
cd build-binutils
..binutils-x.y.zconfigure --target=$TARGET --prefix="$PREFIX" --with-sysroot --disable-nls --disable-werror
make install

This compiles the binutils (assembler, disassembler, and various other useful stuff), runnable on your system but handling code in the format specified by $TARGET.

—with-sysroot tells binutils to enable sysroot support in the cross-compiler by pointing it to a default empty directory. By default, the linker refuses to use sysroots for no good technical reason, while gcc is able to handle both cases at runtime. This will be useful later on.


Now, you can build GCC.

cd $HOMEsrc
# The $PREFIX/bin dir _must_ be in the PATH. We did that above.
which -- $TARGET-as || echo $TARGET-as is not in the PATH
mkdir build-gcc
cd build-gcc
..gcc-x.y.zconfigure --target=$TARGET --prefix="$PREFIX" --disable-nls --enable-languages=c,c++ --without-headers
make all-gcc
make all-target-libgcc
make install-gcc
make install-target-libgcc

We build libgcc, a low-level support library that the compiler expects available at compile time. Linking against libgcc provides integer, floating point, decimal, stack unwinding (useful for exception handling) and other support functions. Note how we are not simply running make && make install as that would build way too much, not all components of gcc are ready to target your unfinished operating system.

—disable-nls is the same as for binutils above.

—without-headers tells GCC not to rely on any C library (standard or runtime) being present for the target.

—enable-languages tells GCC not to compile all the other language frontends it supports, but only C (and optionally C++).

It will take a while to build your cross-compiler.

If you are building a cross compiler for x86-64, you may want to consider building Libgcc without the «red zone»: Libgcc_without_red_zone

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *