Как установить GCC и Clang на Linux

Компилятор C — базовый инструмент для разработки и сборки программ на C (а также многих других языков через соответствующие фронтенды). На Linux две основные реализации — GCC (долговечный и широко используемый) и Clang (модернный фронтенд для LLVM). Понимание, как их установить и чем они отличаются, поможет собрать проекты из исходников, разработать системный код или настроить CI.
Краткое определение
GCC — GNU Compiler Collection: набор компиляторов для C, C++, Fortran и других языков. Clang — компиляторный фронтенд, использующий инфраструктуру LLVM; совместим с синтаксисом GCC в большинстве случаев.
Установка GCC на популярных дистрибутивах
Debian / Ubuntu (и производные):
sudo apt install build-essentialПакет build-essential включает gcc, make, libc и другие базовые инструменты сборки.
Fedora и RPM‑based системы:
sudo dnf install gccArch Linux:
sudo pacman -S gccДругие дистрибутивы: ищите пакет с именем gcc или описание «GNU Compiler Collection» в менеджере пакетов.
Чтобы проверить установленный GCC и его версию:
gcc --versionПример компиляции
Скомпилировать простую программу “Hello, World!”:
/* hello.c */
#include
int main(void) {
printf("Hello, World!\n");
return 0;
} Команда компиляции:
gcc hello.cЕсли все прошло успешно, в текущем каталоге появится исполняемый файл a.out. Чтобы задать имя выходного файла, используйте опцию -o:
gcc -o hello hello.c
./helloУстановка Clang на Linux
Clang распространяется как пакет clang и доступен в репозиториях большинства дистрибутивов.
Debian / Ubuntu:
sudo apt install clangFedora / CentOS:
sudo dnf install clangArch Linux:
sudo pacman -S clangПроверка версии Clang:
clang --versionКомпилируется так же, как с GCC:
clang hello.cСравнение GCC и Clang — по пунктам
| Критерий | GCC | Clang/LLVM |
|---|---|---|
| Лицензия | GPL (частично) | Apache 2.0 (менее рестриктивная) |
| Совместимость | Широко поддерживается проектами, включая ядро Linux | Сильная совместимость с GCC, иногда лучше диагностирует ошибки |
| Сообщения об ошибках | Приемлемые | Часто более информативные и понятные |
| Производительность | Отличная в разных сценариях | Хорошая; в ряде случаев сборки быстрее из‑за LLVM |
Важно: конкретная производительность и размер бинарника зависят от проекта и флагов компиляции.
Полезные флаги и советы
- -O0, -O1, -O2, -O3 — уровни оптимизации
- -g — включить отладочную информацию
- -Wall — включить большинство предупреждений
- -Werror — считать предупреждения ошибками
- -std=c11 или -std=gnu11 — установить стандарт C
Пример: собрать с оптимизацией и предупреждениями:
gcc -std=c11 -O2 -Wall -Werror -o app app.cКогда выбирать один над другим
- Если проект требует совместимости с инфраструктурой (ядро, некоторые дистрибутивы), используйте GCC.
- Если вам важны подробные сообщения об ошибках, анализ кода или вы используете инструменты LLVM, рассмотрите Clang.
- Для перекрестной компиляции и специфичных платформ изучите целевые бэкенды: и GCC, и LLVM поддерживают разные архитектуры.
Контрольный список перед сборкой проекта из исходников
Для разработчика:
- Установить gcc и/или clang
- Установить make/ninja и необходимую библиотеку разработки (dev, -devel)
- Проверить версии: gcc –version, clang –version
- Запустить ./configure или cmake с указанием компилятора (CC/ CXX)
Пример указания компилятора для cmake:
CC=clang CXX=clang++ cmake ..Для системного администратора:
- Проверить зависимости пакета
- Тестировать сборку в изолированной среде (контейнер, chroot)
- Настроить кеш сборки и кэш хедера (ccache) при массовых сборках
Критерии приёмки
- Команда gcc –version или clang –version возвращает номер версии
- Простой пример hello.c успешно компилируется и запускается
- Проект собирается без неожиданных отсутствующих зависимостей
Часто возникающие проблемы и как их решать
- Ошибка «command not found» — проверьте, установлен ли пакет и доступен ли в PATH.
- Отсутствуют dev-пакеты (например, libc6-dev) — установите соответствующий пакет разработки.
- Конфликты версий компилятора — задавайте конкретный компилятор через переменные окружения CC/CXX.
Набор быстрого принятия решения (Mermaid)
graph TD
A[Нужно компилировать C?] --> B{Требуется совместимость с проектом}
B -- Да --> C[Использовать GCC]
B -- Нет --> D{Нужны улучшенные сообщения об ошибках или анализ}
D -- Да --> E[Использовать Clang]
D -- Нет --> F[Выбор по привычке/политике]
F --> C
F --> EРекомендации по безопасности и приватности
- Компилируйте с опцией -fstack-protector и другими безопасными флагами для критичных приложений.
- Проверяйте и обновляйте компиляторы через системный менеджер пакетов, чтобы получать патчи безопасности.
Заключение
Установить оба компилятора легко: используйте пакеты вашей системы и проверяйте версии. Для большинства задач GCC остаётся стандартом де‑факто, но Clang — отличная альтернатива с удобными сообщениями об ошибках и сильным экосистемным набором. Выберите тот, который лучше подходит под требования проекта, и настройте флаги компиляции.
Краткое резюме:
- Установите build-essential на Debian/Ubuntu, gcc на Fedora, clang в тех же репозиториях для Clang.
- Проверяйте версии и используйте -o для задания имени выходного файла.
- Выбирайте компилятор по совместимости, удобству диагностики и политике лицензирования.
Важно: при сборке больших проектов всегда создавайте тестовую среду и документируйте используемые версии компиляторов.