Я установил новую версию GCC
, которая сортирует мою систему linux. Я планирую обрабатывать несколько версий GCC
в лучшем виде. Я планирую установить все разные версии в каталоге/opt/tools. И тогда мой проект makefile явно указывает версию для использования. Это включает в себя все бинарные исполняемые файлы, то есть g ++, gcc и т. Д., И файлы заголовков, библиотеки ...Как избежать стандартной стандартной библиотеки C/C++ на Linux?
Преимущество этого подхода ясна. Сборка более воспроизводима. Он не предполагает версию, но выбирает очень конкретную. Переключение между разными версиями компилятора происходит внутри make-файла.
Для этого я использую «-nostdinc» и явно помещаю все включенные пути в свою командную строку компиляции. Мой код включает limits.h
и вызывает странную ошибку сборки.
limits.h
является частью libc6-dev, установленной в моем debian. Но это не в каталоге gcc include. Некоторые онлайн-материалы говорят, что стандарт C
lib является частью ОС. Мой вопрос в том, что практично создавать код, не зависящий от файлов и библиотек системных заголовков? Я сомневаюсь, что в gcc могут отсутствовать другие заголовки. Первоначально я думал, что gcc поставляется со всем. Это не так?
Другими словами, системные библиотеки и заголовки зависят от конкретной версии GCC, которая поставляется с дистрибутивом debian? Я чувствую себя некомфортно, что системные заголовки и библиотеки - это, скажем, GCC 4.7, и я использую GCC 5.3.
вы можете использовать контейнеры/виртуальные машины для установки разных версий компиляторов. посмотрите на https://www.docker.com. вот изображение, которое включает в себя все версии gcc https: // hub.docker.com/_/gcc/ – feech
@feech Использование VM было моей первой мыслью. –
Прочитайте Linux с нуля. –