На всякий случай ещё раз кратко фиксирую, "что нужно делать". $ rpm2cpio /var/cache/apt/archives/glib2_2.6.3-alt1_i586.rpm |(mkdir 2.6.3; cd 2.6.3; cpio -idm) 3621 blocks $ rpm2cpio /var/cache/apt/archives/glib2_2.8.1-alt1_i586.rpm |(mkdir 2.8.1; cd 2.8.1; cpio -idm) 4091 blocks $ for f in {2.6.3,2.8.1}/usr/lib/*.so*(.); do nm -D $f |awk 'NF==3{print$2,$3}' >${f%%-*}.sym; done $ ls -1 {2.6.3,2.8.1}/usr/lib/*.sym 2.6.3/usr/lib/libglib.sym 2.6.3/usr/lib/libgmodule.sym 2.6.3/usr/lib/libgobject.sym 2.6.3/usr/lib/libgthread.sym 2.8.1/usr/lib/libglib.sym 2.8.1/usr/lib/libgmodule.sym 2.8.1/usr/lib/libgobject.sym 2.8.1/usr/lib/libgthread.sym $ diff -U1 -r --exclude='*.so*' {2.6.3,2.8.1}/usr/lib diff -U1 -r --exclude='*.so*' 2.6.3/usr/lib/libglib.sym 2.8.1/usr/lib/libglib.sym --- 2.6.3/usr/lib/libglib.sym 2005-09-04 05:17:14 +0400 +++ 2.8.1/usr/lib/libglib.sym 2005-09-04 05:17:14 +0400 @@ -1 +1,2 @@ +T g_access T g_allocator_free @@ -49,3 +50,5 @@ T g_atomic_int_exchange_and_add +T g_atomic_int_get T g_atomic_pointer_compare_and_exchange +T g_atomic_pointer_get T g_basename @@ -56,3 +59,5 @@ T g_build_filename +T g_build_filenamev T g_build_path +T g_build_pathv T g_byte_array_append @@ -74,2 +79,3 @@ T g_cache_value_foreach +T g_chdir T g_child_watch_add @@ -78,2 +84,3 @@ T g_child_watch_source_new +T g_chmod T g_clear_error @@ -91,4 +98,6 @@ T g_convert_with_iconv +T g_creat T g_datalist_clear T g_datalist_foreach +T g_datalist_get_flags T g_datalist_id_get_data @@ -97,2 +106,4 @@ T g_datalist_init +T g_datalist_set_flags +T g_datalist_unset_flags T g_dataset_destroy @@ -164,2 +175,3 @@ T g_file_read_link +T g_file_set_contents T g_file_test @@ -183,2 +195,3 @@ T g_get_home_dir +T g_get_host_name T g_get_language_names @@ -346,2 +359,3 @@ T g_list_sort_with_data +T g_listenv T g_locale_from_utf8 @@ -388,2 +402,6 @@ T g_malloc0 +T g_mapped_file_free +T g_mapped_file_get_contents +T g_mapped_file_get_length +T g_mapped_file_new T g_markup_error_quark @@ -412,2 +430,3 @@ T g_mkdir +T g_mkdir_with_parents T g_mkstemp @@ -801,2 +820,3 @@ T g_try_malloc +T g_try_malloc0 T g_try_realloc @@ -841,2 +861,3 @@ T g_utf8_collate_key +T g_utf8_collate_key_for_filename T g_utf8_find_next_char diff -U1 -r --exclude='*.so*' 2.6.3/usr/lib/libgobject.sym 2.8.1/usr/lib/libgobject.sym --- 2.6.3/usr/lib/libgobject.sym 2005-09-04 05:17:14 +0400 +++ 2.8.1/usr/lib/libgobject.sym 2005-09-04 05:17:14 +0400 @@ -42,2 +42,3 @@ T g_closure_unref +T g_date_get_type T g_enum_complete_type_info @@ -55,2 +56,3 @@ T g_io_condition_get_type +T g_object_add_toggle_ref T g_object_add_weak_pointer @@ -76,2 +78,3 @@ T g_object_ref +T g_object_remove_toggle_ref T g_object_remove_weak_pointer $ Таким образом, видно, что в libglib добавили 21 новую функцию, в libgobject -- 3 новые функции, libgmodule и libgthread не изменились. Мы надеемся на то, что новые функции будут добавляться только в minor, но не в micro версиях (2.8.3 -- major.minor.micro). Вешаем новые функции на интерфейс GLIB_2.8. --- RPM/SPECS/glib2.spec- 2005-08-29 22:20:22 +0000 +++ RPM/SPECS/glib2.spec 2005-09-04 00:56:00 +0000 @@ -14,6 +14,9 @@ Url: ftp://ftp.gnome.org Source: ftp://ftp.gnome.org/pub/gnome/sources/%_name/%ver_major/%_name-%version.tar.bz2 +Source1: %name-2.8-glib.map +Source2: %name-2.8-gobject.map + Provides: lib%name = %version-%release Obsoletes: lib%name @@ -85,6 +88,9 @@ This package provides GLIB static librar %prep %setup -q -n %_name-%version +%__install -p -m644 %SOURCE1 glib/symver.map +%__install -p -m644 %SOURCE2 gobject/symver.map + %build %configure \ %{subst_enable static} \ @@ -92,7 +98,7 @@ This package provides GLIB static librar --enable-gtk-doc %endif -%make_build +%make_build LIBTOOL_EXPORT_OPTIONS=-Wl,--version-script=symver.map #%make -C tests check-TESTS %install End of patch После пересборки появляется: Provides: libglib2 = 2.8.1-alt1, libglib-2.0.so.0, libglib-2.0.so.0(GLIB_2.8), libgmodule-2.0.so.0, libgobject-2.0.so.0, libgobject-2.0.so.0(GLIB_2.8), libgthread-2.0.so.0 Вроде всё правильно.