- gcc⚓︎
- Подготовка⚓︎
- Настройка⚓︎
- Для multilib⚓︎
- Значения параметров⚓︎
- Сборка⚓︎
- Тестирование⚓︎
- Установка⚓︎
- При использовании раздельных каталогов:⚓︎
- Проверка работоспособности⚓︎
- Установленные файлы⚓︎
- Checking If GCC Compiler Is Installed On My Linux System
- Checking If GCC Compiler Is Installed
- Installing GNU GCC Compiler
gcc⚓︎
Пакет содержит набор компиляторов GNU для таких языков как Си и Си++.
Версия: 11.2.0
Размер: 77.14Mb
Приоритет: Необходимый
MD5: 31c86f2ced76acac66992eeedce2fce2
SBU (Сборка временной системы): 14.8
Подготовка⚓︎
Исправьте пути установки библиотек:
sed -e '/m64=/s/lib64/lib/' \ -e '/m32=/s/m32=.*/m32=..\/lib32$(call if_multiarch,:i386-linux-gnu)/' \ -i.orig gcc/config/i386/t-linux64
Настройка⚓︎
На данном этапе необходимы только компиляторы для C и C++, однако вы можете собрать компиляторы для любых поддерживаемых GCC языков программирования, перечислив их через запятые в опции configure —enable-languages=c,c++ . GCC поддерживает следующие языки — c,c++,d,fortran,go,objc,obj-c++ . вы можете собрать все доступные компиляторы, добавив параметр —enable-languages=c,c++,d,fortran,go,objc,obj-c++ . Если позднее вам потребуется компилятор для какого либо языка из этого списка — пересоберите GCC с его поддержкой.
mkdir -v build cd build ../configure --prefix=/usr \ LD=ld \ --disable-bootstrap \ --with-system-zlib \ --enable-languages=c,c++ --disable-multilib
Для multilib⚓︎
mkdir -v build cd build ../configure --prefix=/usr \ LD=ld \ --disable-bootstrap \ --with-system-zlib \ --enable-languages=c,c++ --enable-multilib --with-multilib-list=m64,m32
Значения параметров⚓︎
—disable-bootstrap — предотвращает многократную пересборку GCC
LD=ld — сообщает GCC использовать ранее установленную версию компоновщика
Сборка⚓︎
Тестирование⚓︎
- Увеличьте размер стека по умолчанию
- Произведите тестирование от непривилегированного пользователя во избежание непредвиденных ситуаций с системой.
ulimit -s 32768 chown -Rv tester . su tester -c "PATH=$PATH make -k check"
Тестирование этого пакета занимает достаточно много времени.
Для просмотра итогов теста выполните:
Известно, что 6 тестов, связанных с get_time , дают сбои. По видимому, это связано с локалью en_HK . Кроме того, тест COSTEXPR-52830 не удается.
Установка⚓︎
- Удалите ненужную директорию,
- Убедитесь, что владелец установленных заголовков корректный,
- По историческим причинам некоторые программы могут пытаться найти cpp в директории /lib . Создайте ссылку,
- Для поддержки LTO требуется следующая символическая ссылка,
- Переместите файлы в правильное место:
rm -rf /usr/lib/gcc/$(gcc -dumpmachine)/11.2.0/include-fixed/bits/ chown -v -R root:root \ /usr/lib/gcc/*linux-gnu/11.2.0/include,-fixed> ln -svr /usr/bin/cpp /usr/lib ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/11.2.0/liblto_plugin.so \ /usr/lib/bfd-plugins/ mkdir -pv /usr/share/gdb/auto-load/usr/lib,32> mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib mv -v /usr/lib32/*gdb.py /usr/share/gdb/auto-load/usr/lib32
При использовании раздельных каталогов:⚓︎
Проверка работоспособности⚓︎
Сейчас необходимо проверить работу gcc . Если всё нормально, то продолжайте сборку.
echo 'int main()<>' > dummy.c cc dummy.c -v -Wl,--verbose &> dummy.log readelf -l a.out | grep ': /lib'
Ошибок быть не должно, а результат команды (учитывая различия в имени динамического компоновщика, зависящие от платформы) будет следующий:
Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
Проверим что задействованы правильные стартовые файлы. Выполните команду:
grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log
/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../lib/crt1.o succeeded /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../lib/crti.o succeeded /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../lib/crtn.o succeeded
В зависимости от архитектуры, приведенное выше может немного отличаться. Разница будет в названии каталога после /usr/lib/gcc . Здесь важно обратить внимание на то, что gcc обнаружил все три файла crt * .o в каталоге /usr/lib .
Проверим то, что компилятор выполняет поиск корректных заголовочных файлов:
grep -B4 '^ /usr/include' dummy.log
#include search starts here: /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/include /usr/local/include /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/include-fixed
Проверим, что компоновщик использует корректные пути поиска:
grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'
SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib64") SEARCH_DIR("/usr/local/lib64") SEARCH_DIR("/lib64") SEARCH_DIR("/usr/lib64") SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib") SEARCH_DIR("/usr/local/lib") SEARCH_DIR("/lib") SEARCH_DIR("/usr/lib");
Проверим, что используется корректная стандартная библиотека
grep "/lib.*/libc.so.6 " dummy.log
attempt to open /usr/lib/libc.so.6 succeeded
Проверим, что используется корректный динамический компоновщик:
grep "found ld-linux*" dummy.log
Результат выполнения должен быть (учитывая различия в имени динамического компоновщика, зависящие от платформы):
found ld-linux-x86-64.so.2 at /usr/lib/ld-linux-x86-64.so.2
Если вывод не соответствует вышеуказанному, или вообще не получен, значит, что-то не так. Изучите и повторите шаги, чтобы выяснить, в чем проблема. Перед продолжением процесса необходимо решить любые проблемы.
rm -v dummy.c a.out dummy.log
Установленные файлы⚓︎
Программы: c++ (ссылка на g++), cc (ссылка на gcc), cpp, g++, gcc, gcc-ar, gcc-nm, gcc-ranlib, gcov, gcov-dump и gcov-tool
Библиотеки: libasan., libatomic., libcc1.so, libgcc.a, libgcc_eh.a, libgcc_s.so, libgcov.a, libgomp., libitm., liblsan., liblto_plugin.so, libquadmath., libssp., libssp_nonshared.a, libstdc++., libstdc++fs.a, libsupc++.a, libtsan. и libubsan.
Директории: /usr/include/c++, /usr/lib/gcc, /usr/libexec/gcc и /usr/share/gcc-11.2.0
Checking If GCC Compiler Is Installed On My Linux System
This post will guide you how to check if the gcc compiler or g++ compiler are installed on my ubuntu/CentOS/RHEL Linux system. How to check the location of the installed GCC compiler on Linux. HOw to install GNU c/c++ compiler (GCC and G++) on my Linux system.
Checking If GCC Compiler Is Installed
If you want to check if the GNU GCC Compilers are install on your system, you can try to check the version of GCC compiler on Linux, or you can use which command to locate gcc or g++ commands .
Check the Location of GNU or GCC Compiler
Type the following command to check the location of gcc compiler in your system, type:
$ which g++ $ which gcc $which make
devops@devops-osetc:~$ which gcc /usr/bin/gcc devops@devops-osetc:~$ which g++ /usr/bin/g++ devops@devops-osetc:~$ which make /usr/bin/make
Or you can use the type command to achieve the same result of checking the location of all compilers, type:
$ type gcc $ type g++ $ type make
devops@devops-osetc:~$ type gcc gcc is hashed (/usr/bin/gcc) devops@devops-osetc:~$ type g++ g++ is hashed (/usr/bin/g++) devops@devops-osetc:~$ type make make is hashed (/usr/bin/make)
Check Version of Compiler
if you want to check the version of All compilers installed on your Linux system, you just need to execute the following command:
$ gcc --version $ g++ --version $ make --version
devops@devops-osetc:~$ gcc --version gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. devops@devops-osetc:~$ g++ --version g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. devops@devops-osetc:~$ make --version GNU Make 4.1 Built for x86_64-pc-linux-gnu Copyright (C) 1988-2014 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
Installing GNU GCC Compiler
For CentOS/RHEL 6/7:
You need to execute the following yum command to install gcc compiler, type:
#yum groupinstall "Developent Tools"
#yum group install "Development Tools"
For Ubuntu/Debian Linux:
you need to run the one of the following command to install compilers, type:
$ sudo apt-get install build-essential
$ sudo apt install build-essential