Где лежит gcc linux

Как установить компилятор GCC в Ubuntu 18.04

How to Install GCC Compiler on Ubuntu 18.04

В этом руководстве описаны шаги, необходимые для установки компилятора GCC в Ubuntu 18.04. Мы покажем вам, как установить стабильную версию дистрибутива и последнюю версию GCC.

Коллекция компиляторов GNU (GCC) — это набор компиляторов и библиотек для языков программирования C, C ++, Objective-C, Fortran, Ada, Go и D. Многие проекты с открытым исходным кодом, включая инструменты GNU и ядро ​​Linux, скомпилированы с помощью GCC.

Те же инструкции применимы для Ubuntu 16.04 и любого дистрибутива на основе Ubuntu, включая Kubuntu, Linux Mint и Elementary OS.

Прежде чем вы приступите

Чтобы добавлять новые репозитории и устанавливать пакеты в вашей системе Ubuntu, вы должны войти в систему как пользователь root или пользователь с привилегиями sudo .

Установка GCC на Ubuntu

Репозитории Ubuntu по умолчанию содержат метапакет с именем, build-essential который содержит компилятор GCC и множество библиотек и других утилит, необходимых для компиляции программного обеспечения.

Выполните следующие шаги, чтобы установить компилятор GCC Ubuntu 18.04:

Начните с обновления списка пакетов:

Установите build-essential пакет, набрав:

Команда устанавливает кучу новых пакетов , включая gcc , g++ и make .

Вы также можете установить справочные страницы об использовании GNU / Linux для разработки:

Чтобы убедиться, что компилятор GCC успешно установлен, используйте gcc —version команду, которая выводит версию GCC:

Версия GCC по умолчанию, доступная в репозиториях Ubuntu 18.04 7.4.0 :

Вот и все. GCC теперь установлен в вашей системе, и вы можете начать его использовать.

Компиляция примера Hello World

Скомпилировать базовую программу на C или C ++ с помощью GCC довольно просто. Откройте текстовый редактор и создайте следующий файл:

Сохраните файл и скомпилируйте его в исполняемый файл с помощью следующей команды:

Это создаст двоичный файл с именем hello в том же каталоге, где вы запускаете команду.

Запустите hello программу с помощью:

Программа должна напечатать:

Установка нескольких версий GCC

В этом разделе приведены инструкции по установке и использованию нескольких версий GCC в Ubuntu 18.04. Новые версии компилятора GCC включают поддержку новых языков, лучшую производительность и расширенные функции.

На момент написания этой статьи репозитории Ubuntu по умолчанию включают несколько версий GCC, от 5.x.x до 8.x.x . Последняя версия GCC, 9.1.0 доступная в PPA Ubuntu Toolchain.

Читайте также:  Windows 10 ethernet отключено

В следующем примере мы установим последние три версии GCC и G ++.

Сначала добавьте ubuntu-toolchain-r/test PPA в вашу систему с помощью:

Установите нужные версии GCC и G ++, набрав:

Приведенные ниже команды настраивают альтернативу для каждой версии и связывают с ней приоритет. Версия по умолчанию — это версия с наивысшим приоритетом, в нашем случае это так gcc-9 .

Позже, если вы захотите изменить версию по умолчанию, используйте update-alternatives команду:

Вам будет представлен список всех установленных версий GCC в вашей системе Ubuntu. Введите номер версии, которую вы хотите использовать по умолчанию, и нажмите Enter .

Команда создаст символические ссылки на определенные версии GCC и G ++.

Вывод

Вы успешно установили GCC на свой Ubuntu 18.04. Теперь вы можете посетить официальную страницу документации GCC и узнать, как использовать GCC и G ++ для компиляции программ на C и C ++

Источник

Как рассказать clang’у, где у меня GCC installation?

Собираю игру про космического снайпера-кастрата летуна от cvs-255 . Там в мейкфайле в качестве компилятора жёстко прописан clang. Ну я и думаю: попробую шлангом собрать.

clang не может найти некоторые стандартные заголовки при -stdlib=libstdc++, а кроме того, не может сказать линкеру ничего толкового на стадии линковки. Вот вывод -print-search-dirs:

Как сказать clang’у, чтобы он пользовался 4.8, несмотря на наличие 4.9?

Это, конечно, хорошая мысль, но что если компилировать всё же надо clang’ом?

У тебя всего скорее gcc-4.9 был установлен по умолчанию? Смотри на утилиту update-alternatives чтобы заменить на 4.8. Ну да придется постоянно менять ради gccgo и clang.

А, это гентоспецифичная приблуда, извини.

А ты точно не поменял clang++ на clang?

Там в мейкфайле в качестве компилятора жёстко прописан clang

Пожалуйся на автора в разделе жалоб и предложений. Потребуй, чтобы можно было собирать и GCC.

У тебя всего скорее gcc-4.9 был установлен по умолчанию? Смотри на утилиту update-alternatives

Так нет же, вроде бы:

А ты точно не поменял clang++ на clang?

В данный момент шапка мейкфайла выглядит так:

Пожалуйся на автора в разделе жалоб и предложений. Потребуй, чтобы можно было собирать и GCC.

Если поменять clang++ на g++, то всё работает.

Но на будущее хотелось бы узнать.

Если поменять clang++ на g++, то всё работает.

. только segmentation fault через некоторое время.

Видимо, надо ставить clang 3.5

А ты вообще что-нибудь можешь скомпилировать с помощью clang++ или это только в этом примере не работает?

Я clang ставил apt-get install clang. После этого все заработало.

там hardcoded, до сих пор

Я прочитал ту дискуссию, и, насколько я понял, там ответа нет. 🙁 Началось всё с вопроса «как выбрать вручную без эвристики», а кончилось «вот патч для эвристики, чтобы в данном конкретном случае не надо было выбирать вручную».

Читайте также:  Установка elasticsearch для windows

А ты вообще что-нибудь можешь скомпилировать с помощью clang++ или это только в этом примере не работает?

Нет, даже хэллоуворлд на C++ не компилируется.

Я clang ставил apt-get install clang. После этого все заработало.

Ну теперь сделай apt-get install gccgo-4.9 , и, как в анекдоте про «А у нас зато Горбачёв есть», у тебя всё перестанет компилироваться.

Если серьёзно, я сейчас попытался снести gcc-4.9, но он почему-то не сносится теперь, почему-то от него зависят ещё пакеты. Я так понимаю, у меня может быть что-то серьёзно поломано в пакетах.

Что, впрочем, никак не меняет ситуации с тем, что clang ищет gcc, где хочет, и никого не слушает.

там hardcoded, до сих пор
файл tools/clang/lib/Driver/ToolChains.cpp

Ну что же, ясно, спасибо.

Это, конечно, как говорили крокодил Гена и пионерка Галя, совсем не здорово и даже очень глупо.

Ну теперь сделай apt-get install gccgo-4.9

а давай сразу rm -rf /* ?

Ты знаешь, при ближайшем рассмотрении оказалось, что он стоит практически весь. Только он как-то странно собран. Файл /usr/bin/gcc-4.9 находится в пакете gccgo. «gcc -v» показывает, что он только и поддерживает C, C++ и Go. Хэллоуворлд на чистом C он собрать не может. g++-4.9 вообще нет.

Поэтому тут как-то очень всё экспериментально сделано с этим GCC 4.9. Он только в Ubuntu 14.10 будет основным компилятором.

Это я просто насчёт того прокомментировал, что и у меня бы всё работало, если бы пакеты друг друга не ломали.

Ну вот, поставил более-менее нормальный gcc-4.9 из ppa:ubuntu-toolchain-r/test . Теперь установился полноценный GCC 4.9, и Clang всё собирает.

Очень это удобно в Clang’е сделано, что без правильной версии другого компилятора ничего не работает.

ну вообще-то это не совсем так,
clang просто нужны libstdc++ заголовки и
вот это

$ ls /usr/local/llvm/gcclibs/
crtbegin.o crtbeginT.o crtendS.o crti.o crtprec32.o crtprec80.o libgcc.a libgcc_s.so.1 Scrt1.o
crt1.o crtbeginS.o crtend.o crtfastmath.o crtn.o crtprec64.o gcrt1.o libgcc_s.so Mcrt1.o

сам gcc ему не нужен

clang просто нужны libstdc++ заголовки и
вот это

Ну, это я несколько преувеличиваю, потому что обувь сапожника привлекает повышенное внимание.

Надо будет попробовать libc++ и compiler-rt.

Очень это удобно в Clang’е сделано, что без правильной версии другого компилятора ничего не работает.

На самом деле, да. И так напрягаться, чтоб код писать, ещё и компилятор конфигурировать? Лучше чтобы оно само нашло то, что ему надо. В большинстве случаев это работает, по ссылке проблемы выползли только при кросс-компиляции. Да и у тебя не самая распространённая ситуация.

Читайте также:  Windows обнаружила неполадки жесткого диска как отключить это сообщение

Еще у clang есть опция —gcc-toolchain

Еще у clang есть опция —gcc-toolchain

У тебя какой clang? Опция очень давно поддерживается.

У тебя какой clang? Опция очень давно поддерживается.

Насколько я понимаю, 3.4 — это последняя стабильная ветка. Или она в 3.5 появилась?

В 3.4 должно работать. clang —gcc-toolchain=/path/to/gcc/root

В 3.4 должно работать. clang —gcc-toolchain=/path/to/gcc/root

А! Я понял, в чём беда. Спасибо, сам бы не нашёл.

Такая опция вправду есть, только её в man’е нету. Но если набрать clang —help, то там есть, да. Но если просто набрать «clang —gcc-toolchain», то он говорит, что опция неизвестна, вместо того, чтобы сказать, что нужен аргумент.

Только она как-то очень странно работает:

Врет, скорее всего. Попробуй с -v, и посмотри, где конкретно он берет libgcc и прочую хрень. От gas можно отвязаться на x86, используя встроенный ассемблер. Линковать лучше всего gold-ом.

В принципе можно целиком отвязать clang от gcc: собрать libc++ и libc++abi, собрать выдранные из gcc crtbegin и т.д.

Вот что происходит при компиляции хэллоуворлда:

Может быть, я не ту директорию указываю в качестве gcc root? Вот что лежит в /usr/lib/gcc/x86_64-linux-gnu/4.8:

что-то я не понимаю, хваленный проприетащикоугодный clang настолько полноценный что без gcc не работает ? объясните что тут происходит-то!

Работает. Но обычно его собирают так, чтобы он с gcc взаимодействовал. ТС явно брал clang из пакетов, а не собирал, как полагается.

От gcc ему нужна libgcc (crtbegin, crtend и прочая гадость). Он так же умеет использовать libstdc++, которая идет в составе gcc, но можно и libc++.

Странный вообще у тебя gcc. Обычно —gcc-toolchain работает корректно, если ему дать prefix, куда устанавливался gcc. У тебя же он по системе размазан.

Из репозиториев Убунты.

Обычно —gcc-toolchain работает корректно, если ему дать prefix, куда устанавливался gcc. У тебя же он по системе размазан.

У меня есть самосборный GCC, правда для —host=i686-pc-linux-gnu (а у меня amd64). Я пробовал, кстати, его подсунуть clang’у, не помогло: он как будто проигнорировал —gcc-toolchain. Однако у него в иерархии файлов всё то же самое:

/Builds/gcc-i686/lib/i686-pc-linux-gnu/gcc/4.8.2 — то есть, похоже, GCC в пакетах Убунты запакован так, как он сам устанавливается, если —prefix=/usr.

Работает. Но обычно его собирают так, чтобы он с gcc взаимодействовал. ТС явно брал clang из пакетов, а не собирал, как полагается.

Попробую потом пособирать. Вижу, кстати, что при сборке тоже можно указать —with-gcc-toolchain. Может, он таким образом найдёт правильный GCC. Или, может быть, в Убунте что-то напутали с пакетом.

Источник

Оцените статью