On Sat, Apr 22, 2006 at 05:10:28AM +0400, QA Team Robot wrote: > 192 NEW dup_elf_symbols added to the list > ananas-engine-qt /usr/lib/libananasplugin.so libqt3 /usr/lib/libdesignercore.so.1.0.0 12 У этих двух бинарей совпадает примерно 2^{12} символов (показатель степени округляется). Т.е. порядка 4096 символов -- это не хухры-мухры, с очень высокой вероятностью имеет место реальное дублирование кода. $ grep '/usr/lib/libananasplugin.so.*/usr/lib/libdesignercore.so.1.0.0' product |head ananas-engine-qt /usr/lib/libananasplugin.so libqt3 /usr/lib/libdesignercore.so.1.0.0 T _Z10find_accelRK7QStringR4QMapI5QChar11QWidgetListEP7QWidget ananas-engine-qt /usr/lib/libananasplugin.so libqt3 /usr/lib/libdesignercore.so.1.0.0 T _Z13assistantPathv ananas-engine-qt /usr/lib/libananasplugin.so libqt3 /usr/lib/libdesignercore.so.1.0.0 T _Z13qChoosePixmapP7QWidgetP10FormWindowRK7QPixmapP7QString ananas-engine-qt /usr/lib/libananasplugin.so libqt3 /usr/lib/libdesignercore.so.1.0.0 T _Z13widgetManagerv ananas-engine-qt /usr/lib/libananasplugin.so libqt3 /usr/lib/libdesignercore.so.1.0.0 T _Z14qChoosePixmapsP7QWidget ananas-engine-qt /usr/lib/libananasplugin.so libqt3 /usr/lib/libdesignercore.so.1.0.0 T _Z15clean_argumentsRK7QString ananas-engine-qt /usr/lib/libananasplugin.so libqt3 /usr/lib/libdesignercore.so.1.0.0 T _Z15find_formwindowP7QWidget ananas-engine-qt /usr/lib/libananasplugin.so libqt3 /usr/lib/libdesignercore.so.1.0.0 T _Z16int_to_size_typei ananas-engine-qt /usr/lib/libananasplugin.so libqt3 /usr/lib/libdesignercore.so.1.0.0 T _Z16size_type_to_intN11QSizePolicy8SizeTypeE ananas-engine-qt /usr/lib/libananasplugin.so libqt3 /usr/lib/libdesignercore.so.1.0.0 T _Z17set_splash_statusRK7QString $ grep '/usr/lib/libananasplugin.so.*/usr/lib/libdesignercore.so.1.0.0' product |wc -l 4260 $ > atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 8 Эти две игры скорее всего содержат в себе какую-то библиотеку. atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex16 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex24 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex32 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex8 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_lit15 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_lit15x atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_lit16 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_lit16x atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_lit24 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_lit24x atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_lit32 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_lit32x atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_lit8 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_mask15 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_mask16 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_mask24 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_mask32 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_mask8 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_mask_lit15 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_mask_lit15x atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_mask_lit16 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_mask_lit16x atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_mask_lit24 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_mask_lit24x atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_mask_lit32 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_mask_lit32x atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_mask_lit8 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_mask_trans15 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_mask_trans16 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_mask_trans24 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_mask_trans32 atanks /usr/games/atanks ufo2000 /usr/games/ufo2000 T _poly_scanline_atex_mask_trans8 Кандидат на эту библиотеку -- libdevil. libdevil /usr/lib/libILUT.so.1.0.0 T _poly_zbuf_ptex16 libdevil /usr/lib/libILUT.so.1.0.0 T _poly_zbuf_ptex24 libdevil /usr/lib/libILUT.so.1.0.0 T _poly_zbuf_ptex32 libdevil /usr/lib/libILUT.so.1.0.0 T _poly_zbuf_ptex8 libdevil /usr/lib/libILUT.so.1.0.0 T _poly_zbuf_ptex_lit15 libdevil /usr/lib/libILUT.so.1.0.0 T _poly_zbuf_ptex_lit16 libdevil /usr/lib/libILUT.so.1.0.0 T _poly_zbuf_ptex_lit24 libdevil /usr/lib/libILUT.so.1.0.0 T _poly_zbuf_ptex_lit32 > dumb_0.9.2 /usr/bin/dumbplay atanks /usr/games/atanks 8 > dumb_0.9.2 /usr/bin/dumbplay liballegro-devel /usr/bin/textconv 8 > dumb_0.9.2 /usr/bin/dumbplay liquidwar /usr/games/liquidwar 8 > dumb_0.9.2 /usr/bin/dumbplay liquidwar /usr/games/liquidwar-mapgen 8 > dumb_0.9.2 /usr/bin/dumbplay ufo2000 /usr/games/ufo2000 9 То же самое. > freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 6 > freetype /usr/lib/libttf.so.2.2.0 libqt4-gui /usr/lib/libQtGui.so.4.1.2 6 freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T Free_AlternateSubst freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T Free_ChainContextPos freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T Free_ChainContextSubst freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T Free_ClassDefinition freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T Free_ContextPos freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T Free_ContextSubst freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T Free_Coverage ... freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T Load_AlternateSubst freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T Load_ChainContextPos freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T Load_ChainContextSubst freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T Load_ClassDefinition freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T Load_ContextPos freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T Load_ContextSubst freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T Load_Coverage freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T Load_CursivePos freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T Load_Device ... freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T TT_GDEF_Build_ClassDefinition freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T TT_GDEF_Get_Glyph_Property freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T TT_GPOS_Add_Feature freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T TT_GPOS_Clear_Features freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T TT_GPOS_Query_Features freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T TT_GPOS_Query_Languages freetype /usr/lib/libttf.so.2.2.0 libqt3 /usr/lib/libqt-mt.so.3.3.6 T TT_GPOS_Query_Scripts Похоже, что libqt3 и libqt4-gui содержат в себе библиотеку libttf. > gthumb /usr/lib/gthumb-catalog-view gthumb /usr/lib/gthumb-image-viewer 5 gthumb /usr/lib/gthumb-catalog-view gthumb /usr/lib/gthumb-image-viewer D Nautilus_ViewFrame__iinterface gthumb /usr/lib/gthumb-catalog-view gthumb /usr/lib/gthumb-image-viewer D Nautilus_ViewFrame__imethods gthumb /usr/lib/gthumb-catalog-view gthumb /usr/lib/gthumb-image-viewer T Nautilus_ViewFrame_close_window gthumb /usr/lib/gthumb-catalog-view gthumb /usr/lib/gthumb-image-viewer T Nautilus_ViewFrame_go_back gthumb /usr/lib/gthumb-catalog-view gthumb /usr/lib/gthumb-image-viewer T Nautilus_ViewFrame_open_location_force_new_window Что это означает? > gthumb /usr/lib/libgthumb-2.6.9.so epiphany /usr/bin/epiphany-bin 5 gthumb /usr/lib/libgthumb-2.6.9.so epiphany /usr/bin/epiphany-bin T eel_gconf_client_get_global gthumb /usr/lib/libgthumb-2.6.9.so epiphany /usr/bin/epiphany-bin T eel_gconf_get_boolean gthumb /usr/lib/libgthumb-2.6.9.so epiphany /usr/bin/epiphany-bin T eel_gconf_get_default_value gthumb /usr/lib/libgthumb-2.6.9.so epiphany /usr/bin/epiphany-bin T eel_gconf_get_float gthumb /usr/lib/libgthumb-2.6.9.so epiphany /usr/bin/epiphany-bin T eel_gconf_get_integer gthumb /usr/lib/libgthumb-2.6.9.so epiphany /usr/bin/epiphany-bin T eel_gconf_get_string gthumb /usr/lib/libgthumb-2.6.9.so epiphany /usr/bin/epiphany-bin T eel_gconf_get_string_list gthumb /usr/lib/libgthumb-2.6.9.so epiphany /usr/bin/epiphany-bin T eel_gconf_get_value gthumb /usr/lib/libgthumb-2.6.9.so epiphany /usr/bin/epiphany-bin T eel_gconf_handle_error gthumb /usr/lib/libgthumb-2.6.9.so epiphany /usr/bin/epiphany-bin T eel_gconf_is_default gthumb /usr/lib/libgthumb-2.6.9.so epiphany /usr/bin/epiphany-bin T eel_gconf_monitor_add gthumb /usr/lib/libgthumb-2.6.9.so epiphany /usr/bin/epiphany-bin T eel_gconf_monitor_remove gthumb /usr/lib/libgthumb-2.6.9.so epiphany /usr/bin/epiphany-bin T eel_gconf_notification_add > gthumb /usr/lib/libgthumb-2.6.9.so galeon /usr/bin/galeon 4 То же самое. И так далее -- письмо получается слишком длинным. Короче, смысл в том, что проблема дублирования бинарного наполовину решена. То есть создана адекватная модель данных и автоматизировано то, что очевидно подлежит автоматизации. Для окончательного решения проблемы остается только "разгребать завалы", если это кому-то нужно. (Модель данных на самом деле не совсем адекватна -- есть проблемы со strip'ом; т.е. в некоторых ситуациях если стрипнуть как следует, то ничего не остается. Если кто-то знает другие инварианты, помимо ELF символов, которые можно использовать для обнаружения дублирования бинарного кода, это будет очень интересно.)