[devel] Re: version script for glib2

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Вс Сен 4 03:15:47 MSD 2005


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__ символов нигде и нет).

Это конечно несколько странно, но в итоге получается как раз то, чего
хочется добиться: ограничить экспорт и повесить некоторые символы на
отдельный интерфейс.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20050904/a8cb6eeb/attachment-0001.bin>


Подробная информация о списке рассылки Devel