* [devel] version script for glib2
@ 2005-09-03 21:30 Alexey Tourbin
2005-09-03 22:06 ` Dmitry V. Levin
0 siblings, 1 reply; 9+ messages in thread
From: Alexey Tourbin @ 2005-09-03 21:30 UTC (permalink / raw)
To: devel
[-- Attachment #1: Type: text/plain, Size: 8173 bytes --]
glib2 собирается libtool'ом, скрипт для экспорта символов
генерируется автоматически:
$ pwd
/home/at/RPM/BUILD/glib-2.8.1/glib
$ head .libs/libglib-2.0.ver
{ global:
IA__g_access;
IA__g_allocator_free;
IA__g_allocator_new;
IA__g_array_append_vals;
IA__g_array_free;
IA__g_array_insert_vals;
IA__g_array_new;
IA__g_array_prepend_vals;
IA__g_array_remove_index;
$
Некоторые символы я хочу перевесить на отдельный интерфейс.
Для этого я делаю другой скрипт на основе этого *.ver скрипта.
--- .libs/libglib-2.0.ver 2005-09-04 01:26:11 +0400
+++ glib2.map 2005-09-04 01:25:26 +0400
@@ -1,3 +1,3 @@
+# based on .libs/libglib-2.0.ver
{ global:
-IA__g_access;
IA__g_allocator_free;
@@ -51,5 +51,3 @@
IA__g_build_filename;
-IA__g_build_filenamev;
IA__g_build_path;
-IA__g_build_pathv;
IA__g_byte_array_append;
@@ -71,3 +69,2 @@
IA__g_cache_value_foreach;
-IA__g_chdir;
IA__g_child_watch_add;
@@ -75,3 +72,2 @@
IA__g_child_watch_source_new;
-IA__g_chmod;
IA__g_clear_error;
@@ -89,6 +85,4 @@
IA__g_convert_with_iconv;
-IA__g_creat;
IA__g_datalist_clear;
IA__g_datalist_foreach;
-IA__g_datalist_get_flags;
IA__g_datalist_id_get_data;
@@ -97,4 +91,2 @@
IA__g_datalist_init;
-IA__g_datalist_set_flags;
-IA__g_datalist_unset_flags;
IA__g_dataset_destroy;
@@ -166,3 +158,2 @@
IA__g_file_read_link;
-IA__g_file_set_contents;
IA__g_file_test;
@@ -185,3 +176,2 @@
IA__g_get_home_dir;
-IA__g_get_host_name;
IA__g_get_language_names;
@@ -347,3 +337,2 @@
IA__g_list_sort_with_data;
-IA__g_listenv;
IA__g_locale_from_utf8;
@@ -390,6 +379,2 @@
IA__g_malloc0;
-IA__g_mapped_file_free;
-IA__g_mapped_file_get_contents;
-IA__g_mapped_file_get_length;
-IA__g_mapped_file_new;
IA__g_markup_error_quark;
@@ -418,3 +403,2 @@
IA__g_mkdir;
-IA__g_mkdir_with_parents;
IA__g_mkstemp;
@@ -791,3 +775,2 @@
IA__g_try_malloc;
-IA__g_try_malloc0;
IA__g_try_realloc;
@@ -832,3 +815,2 @@
IA__g_utf8_collate_key;
-IA__g_utf8_collate_key_for_filename;
IA__g_utf8_find_next_char;
@@ -858,3 +840,2 @@
IA__glib_check_version;
-g_access;
g_allocator_free;
@@ -908,5 +889,3 @@
g_atomic_int_exchange_and_add;
-g_atomic_int_get;
g_atomic_pointer_compare_and_exchange;
-g_atomic_pointer_get;
g_basename;
@@ -917,5 +896,3 @@
g_build_filename;
-g_build_filenamev;
g_build_path;
-g_build_pathv;
g_byte_array_append;
@@ -937,3 +914,2 @@
g_cache_value_foreach;
-g_chdir;
g_child_watch_add;
@@ -942,3 +918,2 @@
g_child_watch_source_new;
-g_chmod;
g_clear_error;
@@ -956,6 +931,4 @@
g_convert_with_iconv;
-g_creat;
g_datalist_clear;
g_datalist_foreach;
-g_datalist_get_flags;
g_datalist_id_get_data;
@@ -964,4 +937,2 @@
g_datalist_init;
-g_datalist_set_flags;
-g_datalist_unset_flags;
g_dataset_destroy;
@@ -1033,3 +1004,2 @@
g_file_read_link;
-g_file_set_contents;
g_file_test;
@@ -1053,3 +1023,2 @@
g_get_home_dir;
-g_get_host_name;
g_get_language_names;
@@ -1217,3 +1186,2 @@
g_list_sort_with_data;
-g_listenv;
g_locale_from_utf8;
@@ -1260,6 +1228,2 @@
g_malloc0;
-g_mapped_file_free;
-g_mapped_file_get_contents;
-g_mapped_file_get_length;
-g_mapped_file_new;
g_markup_error_quark;
@@ -1288,3 +1252,2 @@
g_mkdir;
-g_mkdir_with_parents;
g_mkstemp;
@@ -1678,3 +1641,2 @@
g_try_malloc;
-g_try_malloc0;
g_try_realloc;
@@ -1719,3 +1681,2 @@
g_utf8_collate_key;
-g_utf8_collate_key_for_filename;
g_utf8_find_next_char;
@@ -1754 +1715,52 @@
local: *; };
+# symbols new to 2.8
+GLIB_2.8 {
+IA__g_access;
+IA__g_atomic_int_get;
+IA__g_atomic_pointer_get;
+IA__g_build_filenamev;
+IA__g_build_pathv;
+IA__g_chdir;
+IA__g_chmod;
+IA__g_creat;
+IA__g_datalist_get_flags;
+IA__g_datalist_set_flags;
+IA__g_datalist_unset_flags;
+IA__g_date_get_type;
+IA__g_file_set_contents;
+IA__g_get_host_name;
+IA__g_listenv;
+IA__g_mapped_file_free;
+IA__g_mapped_file_get_contents;
+IA__g_mapped_file_get_length;
+IA__g_mapped_file_new;
+IA__g_mkdir_with_parents;
+IA__g_object_add_toggle_ref;
+IA__g_object_remove_toggle_ref;
+IA__g_try_malloc0;
+IA__g_utf8_collate_key_for_filename;
+g_access;
+g_atomic_int_get;
+g_atomic_pointer_get;
+g_build_filenamev;
+g_build_pathv;
+g_chdir;
+g_chmod;
+g_creat;
+g_datalist_get_flags;
+g_datalist_set_flags;
+g_datalist_unset_flags;
+g_date_get_type;
+g_file_set_contents;
+g_get_host_name;
+g_listenv;
+g_mapped_file_free;
+g_mapped_file_get_contents;
+g_mapped_file_get_length;
+g_mapped_file_new;
+g_mkdir_with_parents;
+g_object_add_toggle_ref;
+g_object_remove_toggle_ref;
+g_try_malloc0;
+g_utf8_collate_key_for_filename;
+};
Затем подменяю в Makefile'е экспорт символов:
$ diff Makefile
--- Makefile- 2005-09-03 19:44:43 +0000
+++ Makefile 2005-09-03 21:23:02 +0000
@@ -409,6 +409,7 @@ glibsubinclude_HEADERS = \
#export_symbols = -export-symbols glib.def
export_symbols = $(LIBTOOL_EXPORT_OPTIONS)
+export_symbols = -Wl,--version-script=glib2.map
#glib_win32_res = glib-win32-res.o
#glib_win32_res_ldflag = -Wl,$(glib_win32_res)
$
Получаю:
$ rm -fv *.la
removed `libglib-2.0.la'
$ make
make all-recursive
make[1]: Entering directory `/home/at/RPM/BUILD/glib-2.8.1/glib'
Making all in libcharset
make[2]: Entering directory `/home/at/RPM/BUILD/glib-2.8.1/glib/libcharset'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/at/RPM/BUILD/glib-2.8.1/glib/libcharset'
make[2]: Entering directory `/home/at/RPM/BUILD/glib-2.8.1/glib'
/bin/sh ../libtool --mode=link gcc -pipe -Wall -O2 -march=i686 -o libglib-2.0.la -rpath /usr/lib -version-info 800:1:800 -export-dynamic -Wl,--version-script=glib2.map garray.lo gasyncqueue.lo gatomic.lo gbacktrace.lo gcache.lo gcompletion.lo gconvert.lo gdataset.lo gdate.lo gdir.lo gerror.lo gfileutils.lo ghash.lo ghook.lo giochannel.lo gkeyfile.lo glist.lo gmain.lo gmappedfile.lo gmarkup.lo gmem.lo gmessages.lo gnode.lo goption.lo gpattern.lo gprimes.lo gqsort.lo gqueue.lo grel.lo grand.lo gscanner.lo gshell.lo gslist.lo gstdio.lo gstrfuncs.lo gstring.lo gthread.lo gthreadpool.lo gtimer.lo gtree.lo guniprop.lo gutf8.lo gunibreak.lo gunicollate.lo gunidecomp.lo gutils.lo gprintf.lo libcharset/libcharset.la giounix.lo gspawn.lo
rm -fr .libs/libglib-2.0.exp .libs/libglib-2.0.la .libs/libglib-2.0.lai .libs/libglib-2.0.so .libs/libglib-2.0.so.0 .libs/libglib-2.0.so.0.800.1 .libs/libglib-2.0.ver
gcc -shared .libs/garray.o .libs/gasyncqueue.o .libs/gatomic.o .libs/gbacktrace.o .libs/gcache.o .libs/gcompletion.o .libs/gconvert.o .libs/gdataset.o .libs/gdate.o .libs/gdir.o .libs/gerror.o .libs/gfileutils.o .libs/ghash.o .libs/ghook.o .libs/giochannel.o .libs/gkeyfile.o .libs/glist.o .libs/gmain.o .libs/gmappedfile.o .libs/gmarkup.o .libs/gmem.o .libs/gmessages.o .libs/gnode.o .libs/goption.o .libs/gpattern.o .libs/gprimes.o .libs/gqsort.o .libs/gqueue.o .libs/grel.o .libs/grand.o .libs/gscanner.o .libs/gshell.o .libs/gslist.o .libs/gstdio.o .libs/gstrfuncs.o .libs/gstring.o .libs/gthread.o .libs/gthreadpool.o .libs/gtimer.o .libs/gtree.o .libs/guniprop.o .libs/gutf8.o .libs/gunibreak.o .libs/gunicollate.o .libs/gunidecomp.o .libs/gutils.o .libs/gprintf.o .libs/giounix.o .libs/gspawn.o -Wl,--whole-archive libcharset/.libs/libcharset.a -Wl,--no-whole-archive -march=i686 -Wl,--version-script=glib2.map -Wl,-soname -Wl,libglib-2.0.so.0 -o .libs/libglib-2.0.so.0.800.1
/usr/bin/ld: anonymous version tag cannot be combined with other version tags
collect2: ld returned 1 exit status
make[2]: *** [libglib-2.0.la] Error 1
make[2]: Leaving directory `/home/at/RPM/BUILD/glib-2.8.1/glib'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/at/RPM/BUILD/glib-2.8.1/glib'
make: *** [all] Error 2
$
Ошибка:
/usr/bin/ld: anonymous version tag cannot be combined with other version tags
Внимание, вопрос: позволяет ли version script одновременно ограничить
список экспортируемых символов (для дефелотного интерфейса, то есть без
интерфейса) и одновременно перевесить некоторые функции на отдельный
интерфейс?
И ещё вопрос: что это за IA__ символы, зачем их экспортировать?
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] version script for glib2
2005-09-03 21:30 [devel] version script for glib2 Alexey Tourbin
@ 2005-09-03 22:06 ` Dmitry V. Levin
2005-09-03 22:18 ` [devel] " Alexey Tourbin
0 siblings, 1 reply; 9+ messages in thread
From: Dmitry V. Levin @ 2005-09-03 22:06 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 718 bytes --]
On Sun, Sep 04, 2005 at 01:30:30AM +0400, Alexey Tourbin wrote:
[...]
> /usr/bin/ld: anonymous version tag cannot be combined with other version tags
>
> Внимание, вопрос: позволяет ли version script одновременно ограничить
> список экспортируемых символов (для дефелотного интерфейса, то есть без
> интерфейса) и одновременно перевесить некоторые функции на отдельный
> интерфейс?
Нет, сочетать базовый интерфейс без версии с интерфейсами, имеющими
версии, GNU ld не позволяет.
Если дать базовому интерфейсу версию, то ld успокоится, однако такой
подход не всегда удобен.
> И ещё вопрос: что это за IA__ символы, зачем их экспортировать?
Это надо смотреть в самой библиотеке glib2.
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* [devel] Re: version script for glib2
2005-09-03 22:06 ` Dmitry V. Levin
@ 2005-09-03 22:18 ` Alexey Tourbin
2005-09-03 22:27 ` Dmitry V. Levin
0 siblings, 1 reply; 9+ messages in thread
From: Alexey Tourbin @ 2005-09-03 22:18 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 454 bytes --]
On Sun, Sep 04, 2005 at 02:06:27AM +0400, Dmitry V. Levin wrote:
> Нет, сочетать базовый интерфейс без версии с интерфейсами, имеющими
> версии, GNU ld не позволяет.
Да ну! Что будет, если в скрипте оставить *только* секцию GLIB_2.8?
Все остальные функции будут экспортированы как часть базового
интерфейса. А ограничить этот экспорт базового интерфейса, выходит,
нельзя. Ковыряние в binutils-2.15.92.0.2/ld/ldlang.c на мысль не
наводит. :(
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] Re: version script for glib2
2005-09-03 22:18 ` [devel] " Alexey Tourbin
@ 2005-09-03 22:27 ` Dmitry V. Levin
2005-09-03 23:15 ` Alexey Tourbin
2005-09-04 2:14 ` Alexey Tourbin
0 siblings, 2 replies; 9+ messages in thread
From: Dmitry V. Levin @ 2005-09-03 22:27 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 473 bytes --]
On Sun, Sep 04, 2005 at 02:18:07AM +0400, Alexey Tourbin wrote:
> On Sun, Sep 04, 2005 at 02:06:27AM +0400, Dmitry V. Levin wrote:
> > Нет, сочетать базовый интерфейс без версии с интерфейсами, имеющими
> > версии, GNU ld не позволяет.
>
> Да ну! Что будет, если в скрипте оставить *только* секцию GLIB_2.8?
> Все остальные функции будут экспортированы как часть базового
> интерфейса.
Так можно, но в явном виде сочетать синтаксис не позволяет.
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* [devel] Re: version script for glib2
2005-09-03 22:27 ` Dmitry V. Levin
@ 2005-09-03 23:15 ` Alexey Tourbin
2005-09-03 23:21 ` Dmitry V. Levin
2005-09-04 2:14 ` Alexey Tourbin
1 sibling, 1 reply; 9+ messages in thread
From: Alexey Tourbin @ 2005-09-03 23:15 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 3461 bytes --]
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__ символов нигде и нет).
Это конечно несколько странно, но в итоге получается как раз то, чего
хочется добиться: ограничить экспорт и повесить некоторые символы на
отдельный интерфейс.
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] Re: version script for glib2
2005-09-03 23:15 ` Alexey Tourbin
@ 2005-09-03 23:21 ` Dmitry V. Levin
2005-09-09 5:00 ` Alexey Tourbin
0 siblings, 1 reply; 9+ messages in thread
From: Dmitry V. Levin @ 2005-09-03 23:21 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 658 bytes --]
On Sun, Sep 04, 2005 at 03:15:47AM +0400, Alexey Tourbin wrote:
> На самом деле (возвращаясь к 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;
Этого можно было бы добиться и без введения GLIB_2.0:
GLIB_2.8 {
global:
g_access;
g_atomic_int_get;
g_atomic_pointer_get;
...
local: _*;
}
Я примерно так же сделал в zlib'е.
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* [devel] Re: version script for glib2
2005-09-03 23:21 ` Dmitry V. Levin
@ 2005-09-09 5:00 ` Alexey Tourbin
2005-09-09 11:05 ` Dmitry V. Levin
0 siblings, 1 reply; 9+ messages in thread
From: Alexey Tourbin @ 2005-09-09 5:00 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 1155 bytes --]
On Sun, Sep 04, 2005 at 03:21:26AM +0400, Dmitry V. Levin wrote:
> > GLIB_2.0 {
> > local: _*;
> > };
> > GLIB_2.8 {
> > g_access;
> > g_atomic_int_get;
> > g_atomic_pointer_get;
> > ...
> > } GLIB_2.0;
>
> Этого можно было бы добиться и без введения GLIB_2.0:
> GLIB_2.8 {
> global:
> g_access;
> g_atomic_int_get;
> g_atomic_pointer_get;
> ...
> local: _*;
> }
Вот что немного смущает:
$ cat symver.map
GDK_2.8 {
global:
gdk_pixbuf_simple_anim_add_frame;
gdk_pixbuf_simple_anim_get_type;
gdk_pixbuf_simple_anim_iter_get_type;
gdk_pixbuf_simple_anim_new;
local:
_*;
};
$ readelf -a .libs/libgdk_pixbuf-2.0.so |grep @GDK_
36: 0001535c 0 OBJECT LOCAL DEFAULT ABS _DYNAMIC@@GDK_2.8
67: 0000aaf0 61 FUNC GLOBAL DEFAULT 11 gdk_pixbuf_simple_anim_ne@@GDK_2.8
102: 0000a630 85 FUNC GLOBAL DEFAULT 11 gdk_pixbuf_simple_anim_ge@@GDK_2.8
161: 0000ab30 225 FUNC GLOBAL DEFAULT 11 gdk_pixbuf_simple_anim_ad@@GDK_2.8
198: 0000a7e0 85 FUNC GLOBAL DEFAULT 11 gdk_pixbuf_simple_anim_it@@GDK_2.8
$
Т.е. _DYNAMIC@@GDK_2.8.
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* [devel] Re: version script for glib2
2005-09-03 22:27 ` Dmitry V. Levin
2005-09-03 23:15 ` Alexey Tourbin
@ 2005-09-04 2:14 ` Alexey Tourbin
1 sibling, 0 replies; 9+ messages in thread
From: Alexey Tourbin @ 2005-09-04 2:14 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 1037 bytes --]
On Sun, Sep 04, 2005 at 02:27:40AM +0400, Dmitry V. Levin wrote:
> > Да ну! Что будет, если в скрипте оставить *только* секцию GLIB_2.8?
> > Все остальные функции будут экспортированы как часть базового
> > интерфейса.
> Так можно, но в явном виде сочетать синтаксис не позволяет.
Я даже смутно догадываюсь, почему. Две эти записи:
VERS_1.0 { ... }; VERS_2.0 { ... };
VERS_1.0 { ... }; VERS_2.0 { ... } VERS_1.0;
существенно отличаются по смантике. В dsohowto.pdf в районе /Handling
Compatible Changes/ говорится: "It would be wrong to remove VERS_1.0
altogether... The VERS_1.0 definition must be kept around since this
version is named as the predecessor of VERS_2.0. If the predecessor
reference would be removed as well, programs linked against the old DSO
and referencing index in version VERS_1.0 would stop working".
Если допустить запись
{ ... };
GLIB_2.8 { ... };
тогда появляется ambiguity: не ясно, должен ли интерфейс GLIB_2.8
наследовать от дефолтного безымянного интерфейса или нет.
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2005-09-09 11:05 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-09-03 21:30 [devel] version script for glib2 Alexey Tourbin
2005-09-03 22:06 ` Dmitry V. Levin
2005-09-03 22:18 ` [devel] " Alexey Tourbin
2005-09-03 22:27 ` Dmitry V. Levin
2005-09-03 23:15 ` Alexey Tourbin
2005-09-03 23:21 ` Dmitry V. Levin
2005-09-09 5:00 ` Alexey Tourbin
2005-09-09 11:05 ` Dmitry V. Levin
2005-09-04 2:14 ` Alexey Tourbin
ALT Linux Team development discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
public-inbox-index devel
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.devel
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git