Статическое подключение Linux мертво?

На самом деле - статический флаг gcc на Linux не работает теперь. Позвольте мне процитировать из GNU libc FAQ:

2.22. Даже для статически связанных программ нужны некоторые общие библиотеки, который не приемлем для меня. Что я могу сделать?

{AJ} NSS (для деталей просто вводят 'информацию libc "служба имен Переключатель"') не будет работать правильно без общих библиотек. NSS позволяет использовать различные сервисы (например, NIS, файлы, дб, hesiod), просто изменив один конфигурационный файл (/etc/nsswitch.conf), не повторно связывая программ. Единственный недостаток - то, что теперь статические библиотеки должны получить доступ к совместно использованным библиотекам. Это обрабатывается прозрачно библиотекой GNU C.

Решение состоит в том, чтобы настроить glibc с - enable-static-nss. В этом случае можно создать статический двоичный файл, который будет использовать только сервисы DNS, и файлы (измените/etc/nsswitch.conf для этого). Необходимо связаться явно против всех этих сервисов. Например:

 gcc -static test-netdb.c -o test-netdb \
   -Wl,--start-group -lc -lnss_files -lnss_dns -lresolv -Wl,--end-group

Проблема с этим подходом состоит в том, что необходимо связать каждую статическую программу, которая использует стандартные программы NSS со всеми теми библиотеками.
{UD} На самом деле, нельзя больше говорить, что libc, скомпилированный с этой опцией, использует NSS. Больше нет никакого переключателя. Поэтому это настоятельно рекомендовано для не использования - enable-static-nss, так как это делает поведение программ в системе непоследовательным.

Касающийся, что факт является там каким-либо разумным путем теперь для создания полно функционирующей статической сборки на Linux или статическом подключении, абсолютно мертво на Linux? Я имею в виду статическую сборку который:

  • Ведет себя точно тот же путь, как динамическая сборка делает (статичный-nss с непоследовательным поведением, является злым!);
  • Работы над разумными изменениями glibc среды и версий Linux;
61
задан 7 August 2010 в 16:24

1 ответ

Статическое подключение вернулось повышающееся!

  • Многие (большинство?) Идут , исполняемые файлы языка программирования статически связаны.
    • увеличенный мобильность и обратная совместимость являются одной причиной для них являющийся популярным.
  • Другие языки программирования имеют подобные усилия сделать статическое подключение действительно легким, например Haskell (я работаю над этим усилие ).
  • Настраивающийся дистрибутивы Linux / наборы пакета как NixOS / nixpkgs позволяет связать большую часть их пакетов статически (например, pkgsStatic, набор пакета может обеспечить все виды статически связанных исполняемых файлов).
  • Статическое подключение может привести к лучше устранение неиспользованного кода во время ссылки, делая исполняемые файлы меньшими.
  • libcs как musl делают статическое подключение легким и корректным.
  • Некоторое большое программное обеспечение промышленность лидеры договариваются об этом. Например Google пишет, новый libc, предназначенный для статического подключения ( ", поддерживают статический некруг и статический КРУГ, связывающийся" , , "мы не намереваемся вложить капитал в в этой точке [в] динамической загрузке и соединении поддержки" ).
12
ответ дан 31 October 2019 в 15:42

Другие вопросы по тегам:

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