- Как установить компилятор GCC в Ubuntu 18.04
- How to Install GCC Compiler on Ubuntu 18.04
- В этом руководстве описаны шаги, необходимые для установки компилятора GCC в Ubuntu 18.04. Мы покажем вам, как установить стабильную версию дистрибутива и последнюю версию GCC.
- Прежде чем вы приступите
- Установка GCC на Ubuntu
- Компиляция примера Hello World
- Установка нескольких версий GCC
- Вывод
- Как рассказать clang’у, где у меня GCC installation?
Как установить компилятор 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.
В следующем примере мы установим последние три версии 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, до сих пор
Я прочитал ту дискуссию, и, насколько я понял, там ответа нет. 🙁 Началось всё с вопроса «как выбрать вручную без эвристики», а кончилось «вот патч для эвристики, чтобы в данном конкретном случае не надо было выбирать вручную».
А ты вообще что-нибудь можешь скомпилировать с помощью 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’е сделано, что без правильной версии другого компилятора ничего не работает.
На самом деле, да. И так напрягаться, чтоб код писать, ещё и компилятор конфигурировать? Лучше чтобы оно само нашло то, что ему надо. В большинстве случаев это работает, по ссылке проблемы выползли только при кросс-компиляции. Да и у тебя не самая распространённая ситуация.
Еще у 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. Или, может быть, в Убунте что-то напутали с пакетом.
Источник