[devel] Re: linking shared libraries 2

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Ср Июн 11 19:02:57 MSD 2003


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, можешь посмотреть?
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20030611/19bf80f0/attachment-0001.bin>


Подробная информация о списке рассылки Devel