Hi, On Mon, Dec 12, 2011 at 05:47:33PM +0400, Dmitry V. Levin wrote: > Анализ логов тестовой пересборки показывает, что в Sisyphus-x86_64 очень много > пакетов с ошибочными и/или некорректными RPATH. [...] > - относительные пути вместо абсолютных; Относительные пути вместо абсолютных в RPATH - это беда. Вот как это выглядит на простом примере. Обычная простая программа без RPATH: $ echo 'int main(void){return 0;}' |gcc -xc - -O2 -Wall -o a.out && strace -eopen ./a.out open("/etc/ld.so.cache", O_RDONLY) = 3 open("/lib64/libc.so.6", O_RDONLY) = 3 +++ exited with 0 +++ Та же самая программа, но с RPATH, содержащим относительный путь: $ echo 'int main(void){return 0;}' |gcc -xc - -O2 -Wall -o a.out -Wl,-rpath,foo && strace -eopen ./a.out open("foo/tls/x86_64/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) open("foo/tls/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) open("foo/x86_64/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) open("foo/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 open("/lib64/libc.so.6", O_RDONLY) = 3 +++ exited with 0 +++ Как видно, относительный путь в RPATH приводит к тому, что ld.so во время запуска программы ищет все слинкованные библиотеки относительно текущего каталога, т.е. в совершенно непредсказуемых местах. Как правило, относительные пути в RPATH - это просто ошибки сборки. Вот, например, самая распространенная из таких ошибок в Sisyphus-x86_64: $ lftp -c 'cat http://git.altlinux.org/beehive/logs/Sisyphus-x86_64/latest/success/CoinSYMPHONY-5.4.1-alt1.svn20110903' | grep RPATH verify-elf: WARNING: ./usr/bin/symphony: RPATH entry found: path=/usr/lib/openmpi/lib verify-elf: WARNING: ./usr/lib64/libSymAppl.so.0.0.0: RPATH entry found: path=/usr/lib/openmpi/lib verify-elf: WARNING: ./usr/lib64/libOsiSym.so.0.0.0: RPATH entry found: path=/usr/lib/openmpi/lib verify-elf: WARNING: ./usr/lib64/libSym.so.0.0.0: RPATH entry found: path=/usr/lib/openmpi/lib Скорее всего, мейнтейнер имел в виду "/usr/lib/openmpi/lib", а вовсе не "path=/usr/lib/openmpi/lib", который у него получился. Вот список исходных пакетов с относительными путями в RPATH на x86-64, в формате ACL: CoinBcp real @everybody CoinBcps real @everybody CoinBlis real @everybody CoinBonmin real @everybody CoinCgl real @everybody CoinClp real @everybody CoinDip real @everybody CoinFlopCpp real @everybody CoinMP real @everybody CoinOS real @everybody CoinSYMPHONY real @everybody CoinSmi real @everybody CoinVol real @everybody GASNet real @qa @everybody adios real @everybody afepack-complex real @everybody afepack-real real @everybody arpack real @qa @everybody blopex-complex real @everybody blopex-real real @everybody blzpack real @qa @everybody ccaffeine real sin @python @qa @everybody cheetah real @qa @everybody chicken voins oddity dsdp real @qa @everybody exodusii real @everybody gromacs mike @qa @everybody h5part-mpi real @everybody ibutils stanv inger real @qa katrin zver @qa libblacs real @qa @everybody libhdf5-7-mpi real @everybody libnetcdf7-mpi real @everybody libproxy shaba aris @gnome libscalapack real @qa @everybody mISDN mithraen mct real @qa @everybody mpe2 real @qa @everybody mpip real sin @python @qa @everybody mpitests real @qa @everybody mumps real @qa @everybody p4est real @everybody parmetis0 real @everybody pastix real @qa @everybody petscfem-complex real @everybody petscfem-real real @everybody primme real @qa @everybody pswarm real @python @qa @everybody pympi real @qa @python @everybody python-module-boostmpi real @everybody python-module-mpi4py real sin @python @qa @everybody salsa-complex real @qa @everybody salsa-real real @qa @everybody scalasca real @qa @everybody scotch real @qa @everybody scribus manowar real @everybody @qa silo real sin @python @qa @everybody spooles real @qa @everybody sprng real @qa @everybody sprng1 real @everybody squid-kerberos-ldap-helper manowar @qa sundials real @qa @everybody trlan real @qa @everybody Я предлагаю считать относительные пути в RPATH грубыми ошибками, приводящими к ошибке сборки даже в режиме проверки rpath=relaxed. -- ldv