[devel] I: illegal RPATH: paths to standard libraries
Dmitry V. Levin
ldv на altlinux.org
Пн Дек 12 17:57:10 MSK 2011
Hi,
On Mon, Dec 12, 2011 at 05:47:33PM +0400, Dmitry V. Levin wrote:
> Анализ логов тестовой пересборки показывает, что в Sisyphus-x86_64 очень много
> пакетов с ошибочными и/или некорректными RPATH.
[...]
> - пути к стандартным библиотекам (/lib, lib64, /usr/lib, /usr/lib64)
Пути к стандартным библиотекам в 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, содержащим /usr/lib64:
$ echo 'int main(void){return 0;}' |gcc -xc - -O2 -Wall -o a.out -Wl,-rpath,/usr/lib64 && strace -eopen ./a.out
open("/usr/lib64/tls/x86_64/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib64/tls/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib64/x86_64/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib64/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 во время запуска программы ищет все слинкованные библиотеки
относительно этого пути. Это приводит, во-первых, к замедлению запуска,
и, во-вторых, к частичному отключению механизма LD_LIBRARY_PATH именно
тогда, когда он понадобится.
Пути к стандартным библиотекам в RPATH встречаются, преимущественно, на
x86_64, а самый распространенный из четырех стандартных путей -
это /usr/lib64. Наиболее частая причина появления /usr/lib64 в RPATH -
это ошибка сборки вследствие кривизны той версии libtool, которую
использовал апстрим. Традиционные методы борьбы с кривым libtool такие:
- %autoreconf (перегенерация всей камарильи включая libtool, возможны
нежелательные побочные эффекты);
- sed -ri 's/^(hardcode_libdir_flag_spec|runpath_var)=.*/\1=/' libtool
(исправление сгенеренного libtool, годится в случае если проект не
использует RPATH по существу);
- утилита chrpath(1) из одноименного пакета.
Вот список исходных пакетов с путями к стандартным библиотекам в RPATH
на x86-64, в формате ACL:
ORBit @nobody
Wcalc gab @everybody
Xdmf real @everybody
a2ps george @everybody
adolc real @qa @everybody
aiksaurus lav @qa
aqbanking cas
arpack real @qa @everybody
aspell damir
audiofile real @everybody
aview kurakin @everybody
babel real sin @python @qa @everybody
bb mike @qa
bind ldv
bogofilter oddity
bs2b drool
btanks oddity dans
c-ares force @everybody
cegui vitty
cfengine stanv @everybody
cherokee force @everybody
chicken voins oddity
cilk real @qa @everybody
clamav asy force
cvtool force @everybody
cyrus-sasl2 vvk @everybody
dakota real @everybody
dar lav @qa @everybody
devil redbaron @qa
dialog inger @qa @everybody
dirac oddity @everybody
ecore aris
edbus aris
eet aris blake
efreet aris
ejudge dk
elementary vitty @everybody
elmerfem real @everybody
embryo aris blake
emotion aris
enca mike force lav @qa
erlang hsv greycat @qa
ethumb aris
evas aris
exiv2 force @everybody
ffmpegthumbnailer shrek @everybody
fidogate @nobody
findlib bga avm @qa @everybody
flac7 @nobody
fluidsynth aris
fontforge pv real
freehdl mithraen
freetds real @everybody
gcc3.4 ldv
gdal dim boyarsh @qa @everybody
geda-gaf lav @everybody
gerbv lav @qa @everybody
gigabase boris @everybody
glade3 @gnome @everybody
gnash sbolshakov
gnome-libs @nobody
gnome-panel @gnome
gnumeric swi
google-gadgets zerg
gphoto2 jinn
gsasl zerg alexsid @qa
gsql boris @gnome @everybody
gtkhtml4 aris @gnome
hermesxd real @everybody
ibutils stanv inger real @qa
id3lib real @everybody
iksemel mithraen
inn vvk @everybody
juffed cas
kdeaccessibility zerg @qa @everybody
kdeaddons zerg @qa @everybody
kdeadmin zerg @qa @everybody
kdeartwork zerg @everybody
kdebase zerg @everybody
kdebindings zerg @qa @everybody
kdegraphics zerg @everybody
kdelibs zerg @everybody
kdemultimedia zerg @everybody
kdenetwork zerg @qa @everybody
kdepim zerg @everybody
kdesdk zerg @everybody
kdetoys zerg @everybody
kdeutils zerg @everybody
kdewebdev zerg @qa @everybody
kdirstat oddity
kesi zerg @everybody
kflickr oddity @qa
kmobiletools oddity @qa zerg @everybody
kmymoney2 cas
kraft cas
kssh zerg @everybody
ktoblzcheck cas
kturing george @everybody
labplot1.6 lav @qa
lesstif sin @qa @everybody snejok
lib2geom lav @qa
libchipcard cas
libchm force @everybody
libcommoncpp2 sbolshakov lav
libdmtx george @everybody
libdv ldv @everybody
libdynamite mike @mobile @qa
libextractor lav force @qa
libfolks aris
libfreetype shrek
libgc lav @qa
libgeotiff dd @everybody
libggi george @everybody
libgii george @qa
libglibmm aris lav @gnome
libgnomekbd @gnome
libgssdp aris
libgtkdatabox force @everybody
libgtkmm3 aris @gnome
libgxps aris
libhid prividen
libicns azol @everybody
libiec61883 lav @qa
libinfinity aris @gnome
liblo @nobody
libmathgl lav @qa
libmesh-complex real @qa @everybody
libmesh-real real @qa @everybody
libming crux @everybody
libnetfilter_log liks @everybody
libnetfilter_queue liks @everybody
libnova zerg
libofx migor cas @qa
liboggz @nobody
liboping mike @qa @everybody
liborange mike @mobile @qa
libossp-uuid misha @everybody
libotr zerg
libpeas aris @gnome
libproj slazav @everybody
libpuzzle force @everybody
libqof lav @qa
librarian lav @gnome @qa
librasqal lav @qa
libraw1394 lav @qa
libsamplerate aris
libsndfile shrek
libspf2 force @everybody
libstatgrab zhum @everybody
libtelepathy-farstream aris
libtlalli force @everybody
libtranslate lav @qa real
libunshield mike genix shaba @mobile @qa
libvncserver zerg @everybody
libwnck @gnome
libwpd shrek
libwpd9 shrek
libwpg lav @qa
libwpg2 shrek
libwps shrek
libxbsql lav @everybody
libxerces-c lav @qa
libxine zerg @everybody
libxspf lav @qa
link-grammar aris
lksctp-tools mithraen @everybody
lxc dans
mcpp sin @qa
minidjvu vkni @everybody
mjpegtools @nobody
mpg123 swi
mplayer ender real sbolshakov @qa
msynctool0 @mobile
multisync-gui shaba @mobile @qa @everybody
musescore lav @qa
mxml real @everybody
mysql-proxy force @everybody
net-snmp26 dubrsl @everybody
net-snmp30 dubrsl @everybody
ntfsprogs @nobody
ntrack zerg @everybody
obexftp week
ocaml bga avm @qa @everybody
ocaml-cryptokit boris @everybody
openbabel mike zerg @qa
opendbx boyarsh
openjade aris @everybody
owfs zver @python
p4est real @everybody
papi real @qa @everybody
pastix real @qa @everybody
perl-Text-BibTeX kirill @cpan @everybody
pgpool-II open @everybody
pgtcl mithraen
php5 rider
php5-ctpp mithraen @everybody
php5-magickwand rider naf
php5-pgsql rider @everybody
pike7.8 boris @everybody
plan9 peet @everybody
plotutils lav @qa
pstoedit oddity rider
python-module-pysvn gik @python
qhull manowar real
qrencode force @everybody
qutim nenderus @everybody
quvi aris @gnome
racket real @everybody
raptor real @everybody
rarpd @nobody
rasqal zerg @everybody
rawstudio force @everybody
recode mike @qa @everybody
reiser4progs seriv @everybody
runawfe kana @everybody
salsa-complex real @qa @everybody
salsa-real real @qa @everybody
sane-frontends lav @qa
serveez @nobody
silo real sin @python @qa @everybody
sim drool @qa
sks boris @everybody
slang2 gns @qa
slurm real @qa @everybody
smalltalk ildar
smpeg real @everybody
speex mithraen
sundials real @qa @everybody
sword lav azol @qa @everybody
t1lib mike @qa @everybody
tastymenu drool
tau real sin @python @qa @everybody
tcl-plugin sbolshakov
telepathy-logger aris
telepathy-mission-control aris
toxine @nobody
tre mike @qa avm
vips mike rom_as @qa force @everybody
wildmidi george @everybody
wimax-network-service @nobody
wxsvg dubrsl @qa
xar @nobody
xdrfile real @qa @everybody
xfdiff @nobody
xforms viy @everybody
xfprint @xfce oddity
xine-ui boyarsh @everybody
xmedcon anyr @everybody
xmms mike eugvv bp gns @qa real
xmorph george @qa
xsane lav @qa
zeromq crux @everybody
zziplib force @everybody
Я предлагаю считать наличие путей к стандартным библиотекам в RPATH
ошибками, приводящими к ошибке сборки в режиме проверки rpath=normal.
--
ldv
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : отсутствует
Тип : application/pgp-signature
Размер : 198 байтов
Описание: отсутствует
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20111212/95093805/attachment-0001.bin>
Подробная информация о списке рассылки Devel