* [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