ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] linking shared libraries 2
@ 2003-05-29  0:10 Alexey Tourbin
  2003-06-10 19:40 ` [devel] " Alexey Tourbin
  0 siblings, 1 reply; 6+ messages in thread
From: Alexey Tourbin @ 2003-05-29  0:10 UTC (permalink / raw)
  To: devel

[-- Attachment #1: Type: text/plain, Size: 694 bytes --]

Господа, ldv,

я всё-таки так и не понял, как правильно/лучше линковать динамические
библиотеки по отношению к другим библиотекам и исполняемым файлам.
Чтобы было понятно, что именно я хочу спросить, рассмотрим конкретный
пример:

Имеется perl (executable).
Имеется libperl.so (shared), в которой находится 99% бинарного кода.

Для работы perl+libperl.so требуется ещё несколько библиотек
(libm, libpthread, libdl, libcrypt).  Все вызовы функций этих
библиотек находятся в libperl.so.

Вопрос: кто должен линковаться с этими дополнительными библиотеками:
perl или libperl.so?  Иными словами, должны ли библиотеки быть
самодостаточными в отношении собственных зависимостей на другие
библиотеки?

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

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

* [devel] Re: linking shared libraries 2
  2003-05-29  0:10 [devel] linking shared libraries 2 Alexey Tourbin
@ 2003-06-10 19:40 ` Alexey Tourbin
  2003-06-10 21:00   ` Dmitry V. Levin
  0 siblings, 1 reply; 6+ messages in thread
From: Alexey Tourbin @ 2003-06-10 19:40 UTC (permalink / raw)
  To: devel

[-- Attachment #1: Type: text/plain, Size: 535 bytes --]

On Thu, May 29, 2003 at 04:10:55AM +0400, Alexey Tourbin wrote:
> Вопрос: кто должен линковаться с этими дополнительными библиотеками:
> perl или libperl.so?  Иными словами, должны ли библиотеки быть
> самодостаточными в отношении собственных зависимостей на другие
> библиотеки?

Weird things happening.

Если libperl и perl ОБА слинковать с -lpthread, то программа работает.
Если с -lpthread слинковать ТОЛЬКО libperl, то программа зависает (в read(2)).

При этом в программе используются треды.
Это глюк, или этому есть объяснение?

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

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

* Re: [devel] Re: linking shared libraries 2
  2003-06-10 19:40 ` [devel] " Alexey Tourbin
@ 2003-06-10 21:00   ` Dmitry V. Levin
  2003-06-11  9:25     ` Alexey Tourbin
  0 siblings, 1 reply; 6+ messages in thread
From: Dmitry V. Levin @ 2003-06-10 21:00 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 915 bytes --]

On Tue, Jun 10, 2003 at 11:40:58PM +0400, Alexey Tourbin wrote:
> On Thu, May 29, 2003 at 04:10:55AM +0400, Alexey Tourbin wrote:
> > Вопрос: кто должен линковаться с этими дополнительными библиотеками:
> > perl или libperl.so?  Иными словами, должны ли библиотеки быть
> > самодостаточными в отношении собственных зависимостей на другие
> > библиотеки?
> 
> Weird things happening.
> 
> Если libperl и perl ОБА слинковать с -lpthread, то программа работает.
> Если с -lpthread слинковать ТОЛЬКО libperl, то программа зависает (в read(2)).
> 
> При этом в программе используются треды.
> Это глюк, или этому есть объяснение?

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

Хотя данный конкретный случай может иметь какую-то другую основу.


--
ldv

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

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

* [devel] Re: linking shared libraries 2
  2003-06-10 21:00   ` Dmitry V. Levin
@ 2003-06-11  9:25     ` Alexey Tourbin
  2003-06-11 15:02       ` Alexey Tourbin
  0 siblings, 1 reply; 6+ messages in thread
From: Alexey Tourbin @ 2003-06-11  9:25 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 588 bytes --]

On Wed, Jun 11, 2003 at 01:00:30AM +0400, Dmitry V. Levin wrote:
> > Если libperl и perl ОБА слинковать с -lpthread, то программа работает.
> > Если с -lpthread слинковать ТОЛЬКО libperl, то программа зависает (в read(2)).

> Хотя данный конкретный случай может иметь какую-то другую основу.

OK, вечером я попробую сделать testcase (на основе perl из Daedalus'а).
Мне просто интересно разобраться, в чем тут дело.  Ума не приложу,
почему программа виснет в syscall'е в зависимости от тонкостей линковки
с -lpthread.  По предварительным данным, взвис происходит где-то на
уровне popen().

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

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

* [devel] Re: linking shared libraries 2
  2003-06-11  9:25     ` Alexey Tourbin
@ 2003-06-11 15:02       ` Alexey Tourbin
  2003-06-13  4:57         ` Alexey Tourbin
  0 siblings, 1 reply; 6+ messages in thread
From: Alexey Tourbin @ 2003-06-11 15:02 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 1416 bytes --]

On Wed, Jun 11, 2003 at 01:25:42PM +0400, Alexey Tourbin wrote:
> > > Если libperl и perl ОБА слинковать с -lpthread, то программа работает.
> > > Если с -lpthread слинковать ТОЛЬКО libperl, то программа зависает (в read(2)).
> 
> > Хотя данный конкретный случай может иметь какую-то другую основу.
> 
> OK, вечером я попробую сделать testcase (на основе perl из Daedalus'а).
> Мне просто интересно разобраться, в чем тут дело.  Ума не приложу,
> почему программа виснет в syscall'е в зависимости от тонкостей линковки
> с -lpthread.  По предварительным данным, взвис происходит где-то на
> уровне popen().

So here goes the testcase.

$ rpm -Uvh ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/Daedalus/SRPMS.daedalus/perl-5.8.1-alt0.3.pre19733.src.rpm
$ rpm -bc ~/RPM/SPECS/perl58.spec
...
$ cd ~/RPM/BUILD/perl
$ cat > fail.t
use threads;
threads->new( sub { print "thread\n"; } )->join;
open PS, "ps -f |";
print "ok\n";
^D
$ cc -o perl perlmain.o lib/auto/DynaLoader/DynaLoader.a -L. -lperl
$ LD_BIND_NOW=1 LD_LIBRARY_PATH=$PWD PERL5LIB=$PWD/lib ./perl fail.t
thread
^C
$ cc -o perl perlmain.o lib/auto/DynaLoader/DynaLoader.a -L. -lperl -lpthread
$ LD_BIND_NOW=1 LD_LIBRARY_PATH=$PWD PERL5LIB=$PWD/lib ./perl fail.t
thread
ok
$

Короче, в первом случае висим, а во втором -- нормально работает.
Я постарался максимально свести проблему с уровня перла до уровня glibc
и всех-этих-дел.  ldv, можешь посмотреть?

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

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

* [devel] Re: linking shared libraries 2
  2003-06-11 15:02       ` Alexey Tourbin
@ 2003-06-13  4:57         ` Alexey Tourbin
  0 siblings, 0 replies; 6+ messages in thread
From: Alexey Tourbin @ 2003-06-13  4:57 UTC (permalink / raw)
  To: ALT Devel discussion list


[-- Attachment #1.1: Type: text/plain, Size: 610 bytes --]

On Wed, Jun 11, 2003 at 07:02:57PM +0400, Alexey Tourbin wrote:
> $ cc -o perl perlmain.o lib/auto/DynaLoader/DynaLoader.a -L. -lperl
> $ LD_BIND_NOW=1 LD_LIBRARY_PATH=$PWD PERL5LIB=$PWD/lib ./perl fail.t
> thread
> ^C
> $ cc -o perl perlmain.o lib/auto/DynaLoader/DynaLoader.a -L. -lperl -lpthread
> $ LD_BIND_NOW=1 LD_LIBRARY_PATH=$PWD PERL5LIB=$PWD/lib ./perl fail.t
> thread
> ok
> $

Господа, вот релевантный diff на strace'ы от обоих случаев.  Здесь
видно, как первый процесс виснет (read 7 unfinished в самом конце), а
второй (большая часть diff'а) -- успешно завершается.  В чем здесь может
быть дело?

[-- Attachment #1.2: perl-pthread.diff.bz2 --]
[-- Type: application/x-bzip2, Size: 11042 bytes --]

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

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

end of thread, other threads:[~2003-06-13  4:57 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-05-29  0:10 [devel] linking shared libraries 2 Alexey Tourbin
2003-06-10 19:40 ` [devel] " Alexey Tourbin
2003-06-10 21:00   ` Dmitry V. Levin
2003-06-11  9:25     ` Alexey Tourbin
2003-06-11 15:02       ` Alexey Tourbin
2003-06-13  4:57         ` Alexey Tourbin

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