On Sun, Sep 04, 2005 at 02:27:40AM +0400, Dmitry V. Levin wrote: > > Да ну! Что будет, если в скрипте оставить *только* секцию GLIB_2.8? > > Все остальные функции будут экспортированы как часть базового > > интерфейса. > Так можно, но в явном виде сочетать синтаксис не позволяет. На самом деле (возвращаясь к glib2) можно сделать вот что. По умолчанию этот *.ver файл, который используется как version script, генерируется libtool'ом при помощи -export-symbols-regex "^[^_].*". Тогда glib2.map можно модифицировать так: GLIB_2.0 { local: _*; }; GLIB_2.8 { g_access; g_atomic_int_get; g_atomic_pointer_get; ... } GLIB_2.0; Тогда что получается. Первая секция, насколько я понял, управляет экспортом "дефолтного" интерфейса. То есть символы _* экспортироваться вообще не будут. Этим достигается такой же эффект, как и с помощью -export-symbols-regex "^[^_].*". Но! Все остальные символы останутся висеть на дефолтном безымянном интерфейсе, то есть НЕ будут "зачислены" в GLIB_2.0. $ nm -D .libs/libglib-2.0.so |awk 'NF==3{print$2,$3}' |grep -v ' g_' A GLIB_2.0 A GLIB_2.8 R glib_binary_age T glib_check_version R glib_interface_age R glib_major_version D glib_mem_profiler_table R glib_micro_version R glib_minor_version D glib_on_error_halt $ readelf -a .libs/libglib-2.0.so |grep GLIB_ 68: 0004b980 174 FUNC GLOBAL DEFAULT 11 g_listenv@@GLIB_2.8 81: 00017780 1611 FUNC GLOBAL DEFAULT 11 g_file_set_contents@@GLIB_2.8 87: 0000e2d0 10 FUNC GLOBAL DEFAULT 11 g_atomic_pointer_get@@GLIB_2.8 114: 0003d5f0 42 FUNC GLOBAL DEFAULT 11 g_creat@@GLIB_2.8 143: 0004a050 766 FUNC GLOBAL DEFAULT 11 g_utf8_collate_key_for_fi@@GLIB_2.8 170: 0003d580 42 FUNC GLOBAL DEFAULT 11 g_chmod@@GLIB_2.8 193: 000120f0 263 FUNC GLOBAL DEFAULT 11 g_datalist_unset_flags@@GLIB_2.8 266: 00029430 71 FUNC GLOBAL DEFAULT 11 g_mapped_file_get_length@@GLIB_2.8 274: 00000000 0 OBJECT GLOBAL DEFAULT ABS GLIB_2.0 401: 00011fe0 262 FUNC GLOBAL DEFAULT 11 g_datalist_set_flags@@GLIB_2.8 436: 00018280 32 FUNC GLOBAL DEFAULT 11 g_build_pathv@@GLIB_2.8 438: 0004c120 190 FUNC GLOBAL DEFAULT 11 g_get_host_name@@GLIB_2.8 489: 00018310 51 FUNC GLOBAL DEFAULT 11 g_build_filenamev@@GLIB_2.8 537: 0003d680 33 FUNC GLOBAL DEFAULT 11 g_chdir@@GLIB_2.8 717: 000294d0 109 FUNC GLOBAL DEFAULT 11 g_mapped_file_free@@GLIB_2.8 718: 00029110 797 FUNC GLOBAL DEFAULT 11 g_mapped_file_new@@GLIB_2.8 764: 00012200 74 FUNC GLOBAL DEFAULT 11 g_datalist_get_flags@@GLIB_2.8 851: 00000000 0 OBJECT GLOBAL DEFAULT ABS GLIB_2.8 936: 00016ef0 319 FUNC GLOBAL DEFAULT 11 g_mkdir_with_parents@@GLIB_2.8 973: 0000e2c0 10 FUNC GLOBAL DEFAULT 11 g_atomic_int_get@@GLIB_2.8 983: 00029480 72 FUNC GLOBAL DEFAULT 11 g_mapped_file_get_content@@GLIB_2.8 988: 0002ca30 76 FUNC GLOBAL DEFAULT 11 g_try_malloc0@@GLIB_2.8 1033: 0003d550 42 FUNC GLOBAL DEFAULT 11 g_access@@GLIB_2.8 2402: 00000000 0 OBJECT GLOBAL DEFAULT ABS GLIB_2.0 2978: 00000000 0 OBJECT GLOBAL DEFAULT ABS GLIB_2.8 $ (Походу этих IA__ символов нигде и нет). Это конечно несколько странно, но в итоге получается как раз то, чего хочется добиться: ограничить экспорт и повесить некоторые символы на отдельный интерфейс.