[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