[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