ALT Linux Sisyphus discussions
 help / color / mirror / Atom feed
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) не будет требовать
обновления.



  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