On Tue, Jan 22, 2008 at 01:17:13AM +0300, Alexey Tourbin wrote: > Я знаю ещё несколько пакетов, для которых неправильный симлинк запакован > в основной библиотечный пакет for a reason, но вообще эту практику лучше > искоренять. Хотя это и не слишком серьёзный баг. Просто теперь будет > видно, что у *-devel пакета порождается нетипичная зависимость. Поясню, почему эту практику нужно искоренять. Единственный правильный способ воспользоваться библиотекой в рантайме -- это нужно знать её сонейм. Сонейм -- это контракт, который говорит о том, что вы откупориваете более-менее то, что вы рассчитываете там найти. Но некоторые людишки не знают сонейма, и вместо %soname пытаются откупорить lib%name.so. Типа "works for me" и несовместимость в ближайшей перспективе. (А несовместимость на уровне сишных библиотек, когда нет никакого managed runtime, чревата понятно чем -- падениями в произвольных местах, которые с трудом поддаются дигностике и отладке). А вот например полюбуйтесь на код из recent libX11: libX11-1.1.3/src/CrGlCur.c: 55 #ifndef LIBXCURSOR 56 #define LIBXCURSOR "libXcursor.so.1" 57 #endif 58 59 static char libraryName[] = LIBXCURSOR; 60 61 static XModuleType 62 open_library (void) 63 { 64 char *library = libraryName; 65 char *dot; 66 XModuleType module; 67 for (;;) 68 { 69 #if defined(hpux) 70 module = shl_load(library, BIND_DEFERRED, 0L); 71 #else 72 module = dlopen(library, RTLD_LAZY); 73 #endif 74 if (module) 75 return module; 76 dot = strrchr (library, '.'); 77 if (!dot) 78 break; 79 *dot = '\0'; 80 } 81 return NULL; 82 } Бесконечный цикл это круто, я так думаю.