[devel] Mozilla libraries and -rpath (was: Gnome applets)

Mikhail Zabaluev =?iso-8859-1?q?mhz_=CE=C1_altlinux=2Eorg?=
Сб Ноя 19 22:44:29 MSK 2005


В Сбт, 19/11/2005 в 21:51 +0300, Konstantin A. Lepikhov пишет:
> > $ my-favourite-program
> > my-favourite-program: error while loading shared libraries: libplc4.so: 
> > cannot open shared object file: No such file or directory
> правильно, надо менять rpath.
> 
> > 
> > Здесь кроме libplc4.so может стоять любая библиотека, входящая в 
> > Mozilla. Это связано с тем, что библиотеки mozilla были без согласования 
> > перенесены из /usr/lib в /usr/lib/mozilla. Обращаю внимание, что из-за 
> > этого сломалась стереотипная (т.е. без правки спеков) сборка ряда 
> > пакетов, зависящих от Mozilla. В некоторых случаях ошибки оказываются 
> > очень неочевидными, как в примере с апплетом часов GNOME: этот апплет 
> > зависит от evolution-data-server, поскольку умеет показывать данные от 
> > органайзера, а evolution-data-server, в свою очередь, зависит от Mozilla.
> гхм. стереотипная сборка пакетов - это плохо. и игнорирование проблем -
> тоже плохо. В текущем виде (с либами в /usr/lib) mozilla suite делает
> неработоспособными _все_ другие mozilla.org-based приложения. Так что в
> новой сборке все сделано правильно.

Теперь всех клиентов нужно пересобирать с -rpath:

/bin/sh ../../../libtool --tag=CC --mode=link gcc  -pipe -Wall -O3 -march=pentium4 -Wall -Wmissing-prototypes  -Wno-sign-compare   -o create-account  create-account.o ../../../addressbook/libedata-book/libedata-book-1.2.la ../../../libedataserver/libedataserver-1.2.la ../../../servers/groupwise/libegroupwise-1.2.la -Wl,--export-dynamic -pthread -lxml2 -lz -lgnome-2 -lpopt -lgnomevfs-2 -lbonobo-2 -lgconf-2 -lgobject-2.0 -lbonobo-activation -lORBit-2 -lm -lgmodule-2.0 -ldl -lgthread-2.0 -lglib-2.0   -lpthread -L/usr/lib/mozilla -ldl -lplc4 -lplds4 -lnspr4  
gcc -pipe -Wall -O3 -march=pentium4 -Wall -Wmissing-prototypes -Wno-sign-compare -o .libs/create-account create-account.o -Wl,--export-dynamic -pthread  ../../../addressbook/libedata-book/.libs/libedata-book-1.2.so ../../../libedataserver/.libs/libedataserver-1.2.so ../../../servers/groupwise/.libs/libegroupwise-1.2.so -lxml2 -lz -lgnome-2 -lpopt -lgnomevfs-2 -lbonobo-2 -lgconf-2 -lgobject-2.0 -lbonobo-activation -lORBit-2 -lm -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lpthread -L/usr/lib/mozilla -ldl -lplc4 -lplds4 -lnspr4
/usr/bin/ld: warning: libssl3.so, needed by /home/mhz/RPM/BUILD/evolution-data-server-1.4.1.1/camel/.libs/libcamel-1.2.so.0, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libsmime3.so, needed by /home/mhz/RPM/BUILD/evolution-data-server-1.4.1.1/camel/.libs/libcamel-1.2.so.0, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libnss3.so, needed by /home/mhz/RPM/BUILD/evolution-data-server-1.4.1.1/camel/.libs/libcamel-1.2.so.0, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libsoftokn3.so, needed by /home/mhz/RPM/BUILD/evolution-data-server-1.4.1.1/camel/.libs/libcamel-1.2.so.0, not found (try using -rpath or -rpath-link)
/home/mhz/RPM/BUILD/evolution-data-server-1.4.1.1/camel/.libs/libcamel-1.2.so.0: undefined reference to `NSS_NoDB_Init на NSS_3.2'
/home/mhz/RPM/BUILD/evolution-data-server-1.4.1.1/camel/.libs/libcamel-1.2.so.0: undefined reference to `NSS_InitReadWrite на NSS_3.2'
/home/mhz/RPM/BUILD/evolution-data-server-1.4.1.1/camel/.libs/libcamel-1.2.so.0: undefined reference to `NSS_SetDomesticPolicy на NSS_3.2'
/home/mhz/RPM/BUILD/evolution-data-server-1.4.1.1/camel/.libs/libcamel-1.2.so.0: undefined reference to `SSL_OptionSetDefault на NSS_3.2'
/home/mhz/RPM/BUILD/evolution-data-server-1.4.1.1/camel/.libs/libcamel-1.2.so.0: undefined reference to `NSS_Shutdown на NSS_3.2'
collect2: ld returned 1 exit status

Из ld.info:

> The `-rpath' option is also used when locating shared objects which are needed
> by shared objects explicitly included in the link

И что делать? Можно добавить опцию -Wl,-rpath,/usr/lib/mozilla в тэг
Libs: в mozilla-*.pc и устроить тотальную пересборку. Только не все
клиенты эти файлы используют. Конкретно, все "мои" клиенты их не
используют и мне придется дорабатывать сборку.
Вдобавок, насколько я знаю, это приведет к воплям verify-elf о том, что
RPATH содержит двоеточия. Сейчас эту проверку нужно ослаблять явно и,
наверное, она там неспроста.

P.S. Хрена с два в таком виде можно опцию добавить. Никто не сказал, что
вывод `pkg-config --libs something.pc` не будет передан напрямую ld, а
ему нужен родной формат, которого не понимает gcc.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: Эта часть сообщения подписана цифровой подписью
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20051119/a674a400/attachment-0001.bin>


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