From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Wed, 11 Jun 2003 19:02:57 +0400 From: Alexey Tourbin To: ALT Devel discussion list Message-ID: <20030611150257.GC4864@solemn.turbinal.org> Mail-Followup-To: ALT Devel discussion list References: <20030529001055.GA29166@solemn.turbinal.org> <20030610194058.GA14603@solemn.turbinal.org> <20030610210030.GA7398@basalt.office.altlinux.org> <20030611092542.GA2989@ungrund> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="jy6Sn24JjFx/iggw" Content-Disposition: inline In-Reply-To: <20030611092542.GA2989@ungrund> Subject: [devel] Re: linking shared libraries 2 Sender: devel-admin@altlinux.ru Errors-To: devel-admin@altlinux.ru X-BeenThere: devel@altlinux.ru X-Mailman-Version: 2.0.9 Precedence: bulk Reply-To: devel@altlinux.ru List-Unsubscribe: , List-Id: ALT Devel discussion list List-Post: List-Help: List-Subscribe: , List-Archive: Archived-At: List-Archive: List-Post: --jy6Sn24JjFx/iggw Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit 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, можешь посмотреть? --jy6Sn24JjFx/iggw Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE+50SgfBKgtDjnu0YRApXkAKC7Vn08Grmg48Jmb/iNEECybHuENACgi1dN /G+70DhxgE0iuV6HuzDZeMQ= =ncvR -----END PGP SIGNATURE----- --jy6Sn24JjFx/iggw--