В Сбт, 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.