Почему Linux имеет компилятор C по умолчанию?

Согласно Wiki Ubuntu на Переменных среды любой в ~/.pam_environment или в /etc/environment, В зависимости от того, что Вы хотите это для всех пользователей или просто Вашего пользователя.

Переменные среды всей сессии

Настройки переменной среды, которые должны влиять просто на конкретного пользователя (скорее затем система в целом) должны быть установлены в:

~/.pam_environment - Этот файл конкретно предназначен для установки среды пользователя. Это не файл сценария, а скорее состоит из выражений присваивания, один на строку.

Примечание: Использование .pam_environment требует перевхода в систему для инициализации переменных. Перезапуск просто терминала не достаточен, чтобы смочь использовать переменные.

И

Переменные среды в масштабе всей системы

Настройки переменной среды, которые влияют на систему в целом (скорее затем просто конкретный пользователь) не должны быть помещены ни в один из многих сценариев системного уровня, которые выполняются, когда система или настольная сессия загружаются, но в

/etc/environment - Этот файл конкретно предназначен для настроек переменной среды в масштабе всей системы. Это не файл сценария, а скорее состоит из выражений присваивания, один на строку. А именно, это хранилища файлов локаль в масштабе всей системы и настройки пути.

2
29.06.2013, 14:01
2 ответа

Почему дистрибутив Linux имеет gcc установленным заранее?

Дистрибутив Linux довольно неопределенен. Некоторая установка это, большая часть предложения установить его (возможно, даже если Вы выбираете значения по умолчанию во время установки). Однако не все дистрибутивы установят его, и у Вас обычно есть выбор.

Это, потому что большинство приложений в Linux записано в C?

Нет. Компилятор C (любой компилятор C, GCC является просто примером, это мог бы точно также быть clang/lvm, или что-то еще) просто невероятно удобно иметь. И не только в системе Linux, но также и в BSDs или установках окон.

Что произошло бы, если gcc каталог удален?

Принятие их не является никакими программами, установленными, которые зависят от любой части GCC (или часть его, такая как препроцессор) затем, все продолжит работать просто великолепно. Вы просто не можете скомпилировать новые программы C с этим версия GCC, которую Вы просто удалили. Если это был последний компилятор C (у Вас может быть несколько установленных компиляторов), затем, необходимо будет использовать двоичный пакет для переустановки его если Вы для компиляции любых программ C позже.

Обратите внимание, что с тем, Что произошло бы, если gcc каталог удален? Я предполагаю, что Вы удалили бы его с помощью надлежащего диспетчера пакетов. Просто случайным образом удаление каталогов на любой ОС не является безопасной вещью сделать.

14
27.01.2020, 21:49
  • 1
    Кроме того, насколько я помню, POSIX требует, чтобы рабочий компилятор C был доступен в совместимой POSIX системе. Так, если распределение хочет быть максимально близким к POSIX, ему нужен компилятор C. –  liori 29.06.2013, 18:55
  • 2
    И много программ распределяются только в исходной форме или для различных платформ с пользователем, который, как ожидают, скомпилирует их для работы над их конкретной системой. Не "большинство", но все еще много. –  Wutaz 29.06.2013, 20:39
  • 3
    я не сказал бы, что компилятор C пригождается в Windows. Программы обычно распределяются как установщики или предварительно скомпилированные двоичные файлы, пользователь, как предполагается, ничего не компилирует. На Unix это полностью отличается, конечно. –  Malcolm 30.06.2013, 00:20
  • 4
    @liori AFAIR, компилятор C является частью (C) опции разработки во всех версиях POSIX. Вам не нужен, чтобы требовать соответствия POSIX, только требовать соответствия с той опцией. –  Gilles 'SO- stop being evil' 30.06.2013, 02:11
  • 5
    dkms требует gcc и Вам нужно dkmsесли у Вас есть внешние модули ядра (VirtualBox, вирусный сканер, определенные аппаратные средства...), таким образом, они могут быть перекомпилированы для работы с обновлениями ядра. –  xenoid 11.12.2017, 02:01

Много утилит на Linux были скомпилированы с помощью gcc. Большинство тех утилит выполняет вызовы к совместно использованной библиотеке времени выполнения и в случае, если Вы удаляете единый пакет предложений, необходимо будет все еще сохранить общие библиотеки.

Я действительно немного искал на /bin/ls использование команды strings -a /bin/ls и это показывает использование libc.so, который является стандартной библиотекой для C на Linux. Так как Linux является официально Гну/Linux, я могу предположить, что большинство утилит было скомпилировано с Gnu/C или gcc. Если Вы делаете man libc, Вы заметите, что это указывает на использование glibc для большинства утилит Linux. Следовательно, необходимо сохранить libc и glibc чтобы утилиты работали.

3
27.01.2020, 21:49
  • 1
    Этот ответ был бы IMO быть значительно улучшенным путем списка нескольких примеров приложений, которые выполняют такие вызовы к GCC и его связанному набору инструментальных средств и библиотекам после того, как приложения были созданы. Кроме приложений с закрытым исходным кодом, бывших нужных в коде связующего звена, который будет обновлен, например, при установке новой версии ядра, как упомянуто Hauke в комментариях к вопросу, я не могу думать ни о каком варианте использования для того не связанного с разработкой программного обеспечения (в этом случае, Вы почти наверняка хотели бы компилятор так или иначе, хотя, конечно, это должен будет не обязательно быть GCC в особенности). –  a CVn 29.06.2013, 22:11
  • 2
    Общая библиотека libgcc_s, который обычно обеспечивается отдельно от gcc. –  Gilles 'SO- stop being evil' 30.06.2013, 02:13

Теги

Похожие вопросы