From: "Dmitry Kazimirov" <d.kazimirov@olivema.com>
To: "ALT Linux Sisyphus discussion list" <sisyphus@altlinux.ru>
Subject: Re: [sisyphus] Re: пережёвываем libtool
Date: Fri, 8 Apr 2005 18:25:34 +0600
Message-ID: <003e01c53c36$161124d0$c464a8c0@OLIVEMA> (raw)
In-Reply-To: <200504082102.04463.alexey_borovskoy@mail.ru>
> А существует ли совсем правильная замена libtool?
Уоу оу оу. Стоп. Кто сказал, что libtool поступает неправильно,
используя файлы *.la для того, чтобы включить в зависимости
собираемой библиотеки (исполняемого файла) все используемые
ей (им) библиотеки, которые не были перечислены явно при
линковке? Ведь в общем случае правильно поступать именно так.
Рассмотрим такую вот ситуацию:
1. Библиотека BASE предоставляет некоторый интерфейс для
доступа к объекту, описываемому структурой BASE_STRUCT.
Пусть, например, sizeof(BASE_STRUCT) = 8.
Пусть есть метод base_initialize(BASE_STRUCT*).
Пусть эта библиотека имеет libtool version info 3:4:1.
2. Библиотека BASE_UTIL предоставляет дополнительные
функции по управлению объектами, описанными структурой
BASE_STRUCT (например, упрощенный интерфейс для доступа
к ним). Версия BASE_UTIL - 1:5:0.
2. Приложение APP использует библиотеку BASE_UTIL для
простого управления объектами BASE_STRUCT. Приложение
APP собирается при помощи libtool без файла libBASE_UTIL.la.
Тогда в зависимости APP не будет включена библиотека
libBASE.so.2, а только libBASE_UTIL.so.1.
Теперь представим, что автор библиотеки BASE увеличил размер
структуры BASE_STRUCT, добавив какой-нибудь указатель и
sizeof(BASE_STRUCT) = 12, поэтому base_initialize заполняет 12
байт. Зная, что полученная библиотека несовместима с
предыдущими версиями, автор увеличил номер интерфейса
библиотеки. Теперь её libtool version info - 4:0:0.
А вот автор библиотеки BASE_UTIL не подумал о том, что
интерфейс его библиотеки опосредованно изменился (не заметил,
был невнимателен, посчитал это неправильным или что-то еще),
и не увеличил version info до 2:0:0.
Что же мы имеем? Библиотека BASE_UTIL опакетилась и стала
требовать libBASE.so.4, но ее версия не изменилась, и
приложение APP по-прежнему захочет исползовать
libBASE_UTIL.so.1, которая, например, будучи загруженной в
приложение вместо приложением восьми байт неожиданно
проинициализирует 12, и т. д. Короче, приложение упадет.
А все потому, что приложение APP не имело прямой зависимости
от BASE, хотя использовала ее через BASE_UTIL.
Так что у *.la файлов есть определенные плюсы, и уж точно
не стоит искать "более правильную" замену libtool.
Следует отметить, что есть множество причин, по которым
описанная ситуация будет происходить очень редко, так что
в Сизифе можно экономить на трафике, исключая непрямые
зависимости. Ведь при создании дистрибутива, я думаю, всё равно
все включаемые в него пакеты будут пересобраны. Однако в
будущем описанная проблема может возникнуть при обновлении
некоторых пакетов дистрибутива из Сизифа. Например, libBASE...rpm
и libBASE_UTIL...rpm обновятся по зависимости друг от друга, а
приложение из APP...rpm будет падать, если его не обновить из
Сизифа вручную (так как зависимость от неизменившейся
интерфейсной версии libBASE_UTIL...rpm) не будет требовать
обновления.
next prev parent reply other threads:[~2005-04-08 12:25 UTC|newest]
Thread overview: 93+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-04-04 9:39 [sisyphus] Рационализаторам посвящается Ruslan Popov
2005-04-04 9:30 ` Igor Zubkov
2005-04-04 10:40 ` Ruslan Popov
2005-04-04 12:05 ` Dmitry Kazimirov
2005-04-04 11:44 ` Igor Zubkov
2005-04-04 13:14 ` Dmitry Kazimirov
2005-04-04 12:27 ` Ruslan Popov
2005-04-04 12:59 ` [sisyphus] [JT] " Dmitry Kazimirov
2005-04-04 14:01 ` Ruslan Popov
2005-04-05 4:09 ` Mike Lykov
2005-04-04 13:08 ` [sisyphus] " Andrey Rahmatullin
2005-04-04 9:47 ` Alexey I. Froloff
2005-04-04 9:53 ` Ruslan Popov
2005-04-04 9:54 ` Led
2005-04-04 10:06 ` Ruslan Popov
2005-04-04 10:15 ` Alexey I. Froloff
2005-04-04 10:24 ` Ruslan Popov
2005-04-06 19:30 ` [sisyphus] " Arioch
2005-04-06 20:22 ` [sisyphus] Re: пережёвываем libtool Dmitry V. Levin
2005-04-08 8:01 ` Alexey Borovskoy
2005-04-08 12:25 ` Dmitry Kazimirov [this message]
2005-04-08 12:39 ` Alexey I. Froloff
2005-04-08 12:43 ` Ivan Fedorov
2005-04-08 12:47 ` Alexey I. Froloff
2005-04-08 13:26 ` Dmitry Kazimirov
2005-04-08 13:32 ` Alexey I. Froloff
2005-04-08 13:41 ` Dmitry Kazimirov
2005-04-08 13:47 ` Alexey I. Froloff
2005-04-08 13:58 ` Dmitry Kazimirov
2005-04-08 14:01 ` Eugene Ostapets
2005-04-08 14:30 ` Nick S. Grechukh
2005-04-08 14:41 ` Eugene Ostapets
2005-04-08 14:26 ` Nick S. Grechukh
2005-04-10 13:37 ` Vitaly Ostanin
2005-04-08 12:54 ` Nick S. Grechukh
2005-04-08 13:20 ` Dmitry Kazimirov
2005-04-08 13:13 ` Dmitry Kazimirov
2005-04-08 13:21 ` Dmitry V. Levin
2005-04-08 13:32 ` Dmitry Kazimirov
2005-04-08 13:47 ` Dmitry V. Levin
2005-04-11 5:53 ` Dmitry Kazimirov
2005-04-13 16:08 ` [sisyphus] [JT] rpm + libdb4.x + libdb4.x = rm -f *.la (was: пережёвываем libtool) Michael Shigorin
2005-04-09 17:29 ` [sisyphus] Re: пережёвываем libtool Alexey Tourbin
2005-04-09 8:44 ` Alexey Borovskoy
2005-04-04 14:33 ` [sisyphus] Рационализаторам посвящается Led
2005-04-05 6:31 ` Ruslan Popov
2005-04-05 6:41 ` Led
2005-04-05 6:51 ` Ruslan Popov
2005-04-05 7:09 ` Led
2005-04-05 7:19 ` Ruslan Popov
2005-04-05 11:13 ` Dmitry V. Levin
2005-04-05 11:39 ` Ruslan Popov
2005-04-05 11:43 ` Nick S. Grechukh
2005-04-05 11:47 ` Dmitry V. Levin
2005-04-05 11:56 ` Ivan Fedorov
2005-04-05 11:58 ` Genix
2005-04-05 12:05 ` Genix
2005-04-06 14:26 ` [sisyphus] " Arioch
2005-04-07 5:34 ` Genix
2005-04-07 6:37 ` [sisyphus] даты в почтовом архиве (was: Рационализаторам посвящается...) Michael Shigorin
2005-04-05 13:31 ` [sisyphus] Рационализаторам посвящается Ruslan Popov
2005-04-05 13:38 ` Andrey Rahmatullin
2005-04-06 6:34 ` Ruslan Popov
2005-04-06 7:01 ` Andrey Rahmatullin
2005-04-05 21:47 ` Dmitry V. Levin
2005-04-04 16:06 ` Andrey Rahmatullin
2005-04-04 10:20 ` [sisyphus] " Michael Shigorin
2005-04-04 9:49 ` Igor Zubkov
2005-04-04 11:43 ` Led
2005-04-04 13:33 ` Arioch
2005-04-04 14:36 ` Led
2005-04-04 20:17 ` Michael Shigorin
2005-04-04 22:03 ` Arioch
2005-04-05 10:15 ` Michael Shigorin
2005-04-05 10:23 ` Arioch
2005-04-05 6:20 ` Led
2005-04-05 6:21 ` Led
2005-04-05 6:44 ` Michael Shigorin
2005-04-04 10:26 ` Ruslan Popov
2005-04-04 10:26 ` [sisyphus] " Valery Pipin
2005-04-04 10:30 ` Guest007
2005-04-04 10:38 ` Led
2005-04-04 10:51 ` Guest007
2005-04-04 11:09 ` Valery Pipin
2005-04-04 11:20 ` Guest007
2005-04-04 11:04 ` Valery Pipin
2005-04-04 11:16 ` Guest007
2005-04-04 11:48 ` Valery Pipin
2005-04-04 12:12 ` Guest007
2005-04-05 3:28 ` Valery Pipin
2005-04-04 14:20 ` Sergey
2005-04-04 15:37 ` Valery Pipin
2005-04-04 11:52 ` Guest007
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='003e01c53c36$161124d0$c464a8c0@OLIVEMA' \
--to=d.kazimirov@olivema.com \
--cc=sisyphus@altlinux.ru \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
ALT Linux Sisyphus discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/sisyphus/0 sisyphus/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 sisyphus sisyphus/ http://lore.altlinux.org/sisyphus \
sisyphus@altlinux.ru sisyphus@altlinux.org sisyphus@lists.altlinux.org sisyphus@lists.altlinux.ru sisyphus@lists.altlinux.com sisyphus@linuxteam.iplabs.ru sisyphus@list.linux-os.ru
public-inbox-index sisyphus
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.sisyphus
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git