LINUX.ORG.RU

И снова про static linking

 


1

3

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

Статически слинкованые дистры вообще существуют? Никто не пробовал так LFS собрать? Где бы скачать life CD с таким чудом, пощупать.

Из того, что нашел сам. stali — концепт. Bifrost — требуется немного магии и чистая флешка, иксов нет, только консоль, только минимализм. Sabotage — конструктор, нужно компилять.

Перемещено mono из talks


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

Ась?

Статически слинкованые дистры вообще существуют?

/me прикинул вдруг glibc статично запихать в каждый бинарь... У месье датацентр дома?

UVV ★★★★★
()

shared object — название говорит само за себя, файлы mmap'ятся и не занимают отдельной памяти в каждом процессе. Венда насколько я знаю так не может.

crowbar
()

Статически слинкованые дистры вообще существуют?

Линукса скорее всего нет, так как смысла особенного нет. Бинари размера просто огромного.

А вообще есть Plan9 :) там static by design.

Дабы предвосхитить вопросы - http://www.plan9.bell-labs.com/wiki/plan9/why_static/

robot12 ★★★★★
()
Ответ на: комментарий от robot12

Откуда дрова про огромные бинари? Если выкинуть GNU libc и заменить на альтернативу, то там оверхед исчисляется килобайтами, см. ссылку выше.

Про Plan9 вкурсе.

Gregon
() автор топика
Ответ на: комментарий от robot12

Топик не читай до конца @ ссылки кидай

Gregon
() автор топика
Ответ на: комментарий от Gregon

Умножь на два. Тебе гига места на диске жалко?

Два бинаря в системе. Ого! Да ты многозадачен!

UVV ★★★★★
()
Ответ на: комментарий от Gregon

Откуда дрова про огромные бинари?

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

apache+all_plugins :) + php

Gimp 1.2

Давно это было, но линковка занимала с полчасика :) и бинари по нескольку десятков мегабайт.

robot12 ★★★★★
()
Ответ на: комментарий от UVV

Ты упоролся. Или ты реально считаешь, что при статической компиляции в бинарь суют всю либу в полном составе со всеми не используемыми функциями?

Gregon
() автор топика
Ответ на: комментарий от tides

Апологеты статической линковки говорят, что при отсутствии динамики программы стартуют и шуршат быстрее + решаются проблемы типа DLL hell. + улучшается переносимость среди дистрибутивов.

Gregon
() автор топика
Ответ на: комментарий от tides

Ага, вижу. Обычно при оптимизации приходится выбирать между размером и скоростью. И то и другое одновременно оптимизировать сложно.

Gregon
() автор топика
Ответ на: комментарий от Gregon

При статической линковке суются объектники со всеми используемыми функциями и их зависимостями.

UVV ★★★★★
()
Ответ на: комментарий от Gregon

что при отсутствии динамики программы стартуют и шуршат быстрее

Оверхед динамического линкера довольно минимален и заметишь ты небольшую задержку лишь при первом запуске.

улучшается переносимость среди дистрибутивов

спорно.

UVV ★★★★★
()
Ответ на: комментарий от robot12

Ммм, странно, мне казалось, что линковка процесс быстрый.

Десятки метров это не сотни, для программ уровня Gimp более чем acceptable :)

Gregon
() автор топика
Ответ на: комментарий от Gregon

Ты упоролся. Или ты реально считаешь, что при статической компиляции в бинарь суют всю либу в полном составе со всеми не используемыми функциями?

При статической линковке в бинарник обычно попадает куча левого неиспользуемого дерьма. Линкер не умеет определять, какие символы реально используются, а какие — нет.

Простейший пример:

$ cat c.cc
#include <iostream>

main() {}


$ g++ -static-libstdc++ -O2 c.cc

$ ls -sh a.out
4,4M a.out

$ nm -C --defined-only a.out | wc -l
2894

Manhunt ★★★★★
()
Ответ на: комментарий от Gregon

Ну тогда такой дистрибутив в LiveCD не поместится

Adonai ★★★
()

Единственный серьезный довод против статической линковки заключается в том, что для динамических либ проще накатывать апдейты на систему.

Но есть и существенный довод за. На суперкомпьтере из 50K узлов, попробуйте выполнить на каждом «dlopen» и наслаждайтесь IO трафиком. Часа три.

Статически слинкованые дистры вообще существуют?

Cray Linux.

VIT
()

так вроде рано же еще для осеннего обострения. или тебе просто скучно?:)

der_looser ★★
()
Ответ на: комментарий от Manhunt

Aren’t whole libraries linked into a static executable?

No. Good libraries implement each library function in separate object (.o) files, this enables the linker (ld) to only extract and link those object files from an archive (.a) that export the symbols that are actually used by a program.

http://sta.li/faq

Судя по всему, это проблема С++ и его стандартной библиотеки в исполнении GNU.

Gregon
() автор топика
Ответ на: комментарий от Gregon

Good libraries implement each library function in separate object (.o) files

Ох, лол. Список этих good libraries — в студию! :D

Manhunt ★★★★★
()
Ответ на: комментарий от Gregon

Судя по всему, это проблема С++ и его стандартной библиотеки в исполнении GNU.

Боюсь, что в реальности это проблема 90% популярных библиотек.

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

Линкер не умеет определять, какие символы реально используются, а какие — нет.

[kosyak@knetbook ~]$ g++ -static-libstdc++ -O2 c.cc
[kosyak@knetbook ~]$ ls -sh a.out
728K a.out
[kosyak@knetbook ~]$ g++ -static-libstdc++ -ffunction-sections -fdata-sections -Wl,--gc-sections -O2 c.cc
[kosyak@knetbook ~]$ ls -sh a.out
384K a.out

Тоже не сахар. Для этой фичи нужно, чтобы все линкованные библиотеки были собраны с -ffunction-sections -fdata-sections

С flto результат должен быть ещё лучше.

Kosyak ★★★★
()
Ответ на: комментарий от Kosyak

Прежде чем на размер смотреть, нужно быть сделать «strip --strip-debug». Это я облажался.

Manhunt ★★★★★
()
Ответ на: комментарий от Kosyak

-ffunction-sections -fdata-sections

Это не панацея. https://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Optimize-Options.html «When you specify these options, the assembler and linker will create larger object and executable files and will also be slower.»

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 1)
Ответ на: комментарий от Gregon

У них не все собрано статикой (и все не соберется). Но с musl можно собирать многое на что плюется glibc/eglibc (ааа, вам нужна рантайм библиотека! вы же собираетесь украсть наш код, аааарррр :)

gh0stwizard ★★★★★
()
Ответ на: комментарий от gh0stwizard

вы же собираетесь украсть наш код

Лицензия типа «с раздвинутыми булками» напрочь отбивает всякое желание поучаствовать в разработке этой вашей musl.

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

Мне как-то пофиг на твое высокое мнение. Ибо, исторически сложилось так, что если бы не Unix, MIT и BSD, ни Minix, ни Linux не было вообще. Было бы что-то другое, но это мы никогда не узнаем.

Без обид.

gh0stwizard ★★★★★
()
Ответ на: комментарий от Manhunt

Надо мыслить позитивно. Сейчас musl, потом кто-то сделает форк и выпустит под GPL. Тебе какая разница? Настоящая конкуренция, вот прям чуваки из соседнего офиса клепают прошивки на musl и делают бешенные деньги? А сам так не хочешь из-за религии? :)

gh0stwizard ★★★★★
()

Статически слинкованые дистры вообще существуют?

Gentoo с LDFLAGS=-static и USE=static static-libs пойдёт? Единственное, так могут возникнуть проблемы с разными бинарными плагинами.

hateyoufeel ★★★★★
()
Ответ на: комментарий от gh0stwizard

Тебе какая разница?

Говорю же: я пользуюсь свободными прошивками, в основном из-за их высокой стабильности и из-за какого-никакого независимого аудита. Вендоры и сейчас-то исходники от своей стоковой фирмвари выдают под угрозой судебных исков, а если появится возможность заменить glibc / busybox / и.т.д. на софт с пермиссивными лицензиями, то исходников мы не увидим как своих ушей. И свободных прошивок не станет; вместо них придётся жрать продукты копроэкономики, давиться и жрать, без альтернатив.

Какая мне разница? Как-то глупо пилить сук, на котором сидишь.

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 2)
Ответ на: комментарий от gh0stwizard

вот прям чуваки из соседнего офиса клепают прошивки на musl и делают бешенные деньги? А сам так не хочешь из-за религии?

Я лично клепаю проприетарщину, которая включает в себя массу пермиссивного опенсорса. Противно смотреть, как контора регулярно отстёгивает бабло микрософту и прочим проприетарщикам, и ни копеечки не вливает тем бздунишкам, труды которых использует для получения прибыли.

Manhunt ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.