ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] взаимозависимые библиотеки
@ 2006-09-19 13:46 Ildar Mulyukov
  2006-09-19 14:09 ` Damir Shayhutdinov
  0 siblings, 1 reply; 6+ messages in thread
From: Ildar Mulyukov @ 2006-09-19 13:46 UTC (permalink / raw)
  To: ALT Devel discussion list

Имею на руках такой фрукт (продукт): libgda
Кроме /usr/lib/libgda.so.%version, также имеются в наличии   
libgda_handlers-3.so.3.0.0 и ещё пара подобных со следующими свойствами:
. libgda.so.3.0.0 зависит от libgda_handlers-3.so.3.0.0
. libgda_handlers-3.so.3.0.0 зависит от libgda.so.3.0.0 (имеет ссылки  
на её функции)

Естественно, при сборке сначала собирается libgda_handlers-3.so, ссылки  
на функции из основной библиотеки не мешают собраться этой библиотеке,  
но verify-elf её не пропускает (и правильно делает)

Вопрос: как правильно преодолеваются такие случаи?
Я пробовал следующий изврат в спеке:
...
%make
rm -f libgda/*/.libs/*.so* libgda/*/*.la
%make LIBS="`pwd`/libgda/libgda-3.la"

Но, как оказалось, make+libtool таким образом не обмануть :(

Заранее спасибо.
С уважением, Ильдар.
--
Ildar  Mulyukov,
   engineer

============================
email: ildar@nexttel.kz
site: http://www.nexttel.kz/
============================


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [devel] взаимозависимые библиотеки
  2006-09-19 13:46 [devel] взаимозависимые библиотеки Ildar Mulyukov
@ 2006-09-19 14:09 ` Damir Shayhutdinov
  2006-09-19 14:50   ` Led
  2006-09-20  4:55   ` Ildar Mulyukov
  0 siblings, 2 replies; 6+ messages in thread
From: Damir Shayhutdinov @ 2006-09-19 14:09 UTC (permalink / raw)
  To: ALT Devel discussion list

> Естественно, при сборке сначала собирается libgda_handlers-3.so, ссылки
> на функции из основной библиотеки не мешают собраться этой библиотеке,
> но verify-elf её не пропускает (и правильно делает)
>
> Вопрос: как правильно преодолеваются такие случаи?

Правильно - разделением кольцевой зависимости  (созданием третьей
либы) на уровне апстрима.
Допустим, А использует функции из B, а B - из A.

Тогда библиотека B разделяется на библиотеку B' и C.
В библиотеку C выносятся все функции библиотеки B, которые использует
библиотека A. При этом C не должна иметь зависимостей на A или B'.

Таким образом, получается зависимость
A -> C
B' -> C, A

Идеологически неверно, но приемлемо решать методом
%_set_verify_elf_method unresolved=relaxed, но это естественно, намного проще.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [devel] взаимозависимые библиотеки
  2006-09-19 14:09 ` Damir Shayhutdinov
@ 2006-09-19 14:50   ` Led
  2006-09-19 15:25     ` Damir Shayhutdinov
  2006-09-20  4:55   ` Ildar Mulyukov
  1 sibling, 1 reply; 6+ messages in thread
From: Led @ 2006-09-19 14:50 UTC (permalink / raw)
  To: ALT Devel discussion list

В сообщении от 19 сентября 2006 17:09 Damir Shayhutdinov написал(a):
> > Естественно, при сборке сначала собирается libgda_handlers-3.so, ссылки
> > на функции из основной библиотеки не мешают собраться этой библиотеке,
> > но verify-elf её не пропускает (и правильно делает)
> >
> > Вопрос: как правильно преодолеваются такие случаи?
>
> Правильно - разделением кольцевой зависимости  (созданием третьей
> либы) на уровне апстрима.
> Допустим, А использует функции из B, а B - из A.
>
> Тогда библиотека B разделяется на библиотеку B' и C.
> В библиотеку C выносятся все функции библиотеки B, которые использует
> библиотека A. При этом C не должна иметь зависимостей на A или B'.
>
> Таким образом, получается зависимость
> A -> C
> B' -> C, A
>
> Идеологически неверно, но приемлемо решать методом
> %_set_verify_elf_method unresolved=relaxed, но это естественно, намного
> проще.

Оно, конечно "идеологически неверное", но если на 100% уверен в том, для чего 
это делаешь, то ИМХО можно:)

-- 
Led.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [devel] взаимозависимые библиотеки
  2006-09-19 14:50   ` Led
@ 2006-09-19 15:25     ` Damir Shayhutdinov
  0 siblings, 0 replies; 6+ messages in thread
From: Damir Shayhutdinov @ 2006-09-19 15:25 UTC (permalink / raw)
  To: ALT Devel discussion list

> Оно, конечно "идеологически неверное", но если на 100% уверен в том, для чего
> это делаешь, то ИМХО можно:)
Так можно завуалировать другие, серьезные проблемы.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [devel] взаимозависимые библиотеки
  2006-09-19 14:09 ` Damir Shayhutdinov
  2006-09-19 14:50   ` Led
@ 2006-09-20  4:55   ` Ildar Mulyukov
  2006-09-20  7:47     ` Damir Shayhutdinov
  1 sibling, 1 reply; 6+ messages in thread
From: Ildar Mulyukov @ 2006-09-20  4:55 UTC (permalink / raw)
  To: devel

On 19.09.2006 20:09:32, Damir Shayhutdinov wrote:
> > Естественно, при сборке сначала собирается libgda_handlers-3.so,
> > ссылки на функции из основной библиотеки не мешают собраться этой
> > библиотеке, но verify-elf её не пропускает (и правильно делает)
> > Вопрос: как правильно преодолеваются такие случаи?
> 
> Правильно - разделением кольцевой зависимости  (созданием третьей
> либы) на уровне апстрима. Допустим, А использует функции из B, а B -  
> из A.
> Тогда библиотека B разделяется на библиотеку B' и C.
> В библиотеку C выносятся все функции библиотеки B, которые использует
> библиотека A. При этом C не должна иметь зависимостей на A или B'.
> Таким образом, получается зависимость
> A -> C
> B' -> C, A
> Идеологически неверно, но приемлемо решать методом
> %_set_verify_elf_method unresolved=relaxed, но это естественно,
> намного проще.

Скажите, а даст ли какие-нибудь положительные результаты такая  
процедура:
1. Компилим А
2. Компилим В с привязкой А
3. Перекомпилим А с привязкой В

Как я писал, с наскоку мне не удалось обхитрить make+libtool. Но, быть  
может, это направление небезнадёжно?

С уважением, Ильдар
--
Ildar  Mulyukov,
   free SW designer/programmer/packager
=========================================
email: ildar@altlinux.ru
ALT Linux Sisyphus http://www.sisyphus.ru
=========================================


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [devel] взаимозависимые библиотеки
  2006-09-20  4:55   ` Ildar Mulyukov
@ 2006-09-20  7:47     ` Damir Shayhutdinov
  0 siblings, 0 replies; 6+ messages in thread
From: Damir Shayhutdinov @ 2006-09-20  7:47 UTC (permalink / raw)
  To: ALT Devel discussion list

> Скажите, а даст ли какие-нибудь положительные результаты такая
> процедура:
> 1. Компилим А
> 2. Компилим В с привязкой А
> 3. Перекомпилим А с привязкой В
>
> Как я писал, с наскоку мне не удалось обхитрить make+libtool. Но, быть
> может, это направление небезнадёжно?

Даже если удастся на этапе сборки, на этапе установки по make install
libtool будет делать relink, и жестоко обломается. Придется тогда и
там исправлять.

ИМХО, геморрой не стоит свеч. Проще unresolved=relaxed

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2006-09-20  7:47 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-09-19 13:46 [devel] взаимозависимые библиотеки Ildar Mulyukov
2006-09-19 14:09 ` Damir Shayhutdinov
2006-09-19 14:50   ` Led
2006-09-19 15:25     ` Damir Shayhutdinov
2006-09-20  4:55   ` Ildar Mulyukov
2006-09-20  7:47     ` Damir Shayhutdinov

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/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 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git