[devel] [FAQ] линковка плагинов
Damir Shayhutdinov
damir на altlinux.org
Чт Дек 16 08:33:09 UTC 2010
> Итак, имеем:
> 1. библиотеку в %_libdir/ , которую используют многие программы.
> 2. её плагины (или модули, дело не в названии), которые располагаются в
> другой папке, например %_libdir/lib%name/
>
> У нас принято считать, что, если это возможно (а это примерно 95% случаев),
> нужно линковать плагины с библиотекой, получив на выходе в идеале
> не-недолинкованные плагины.
> Давайте посмотрим на это с разных сторон:
> 1. В рамках дистрибутива это, несомненно хорошо. Такого рода связи позволяют
> отслеживать зависимости, что является одним из столпов нашего репозитария.
> 2. Однако бывают и другие варианты использования, включающие в себя
> чужеродный софт в системе. Получается, что возможны случаи, когда чужеродная
> программа, которая несёт свою версию библиотеки, поднимет плагин, который
> слинкован с нашей библиотекой. Итого: пришли к двум одинаковым библиотекам в
> адр. пространстве одной программы. А это плохо.
Если у "своей" версии библиотека liblua динамическая, и имеет тот же
soname, то не будет две одинаковые библиотеки в одном адресном
пространстве, все счастливы. Проблемы будут только если liblua
вкомпилена статически, а это в нашем дистрибутиве не поощряется.
> Итак вопрос: нужно ли линковать плагины с основной библиотекой, или
> оставлять их недолинкованными?
Конкретно в случае lua, апстрим рекомендует именно статическую сборку
с liblua на x86, из соображений производительности. Результатов
тестов, показывающих преимущество статической сборки перед
динамической, я не видел, поэтому что они называют significant
performance loss, я не знаю. Может 2%, может 20%. С точки зрения
безопасности лучше собирать все динамически, а в таком случае лучше
долинковывать, чтобы была зависимость на версии символов и soname.
Желающим производительности рекомендовать использовать x86_64 :)
Подробная информация о списке рассылки Devel