[json-glib/wip/smcv/default-symver] build: Add a symbol version to all exported symbols
- From: Simon McVittie <smcv src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [json-glib/wip/smcv/default-symver] build: Add a symbol version to all exported symbols
- Date: Wed, 1 Jul 2020 16:51:49 +0000 (UTC)
commit ef7fb78a5370a5e36272e3bbe91e1864b766a565
Author: Simon McVittie <smcv collabora com>
Date: Mon Jun 29 17:56:23 2020 +0100
build: Add a symbol version to all exported symbols
The --default-symver linker option attaches a default version definition
(the SONAME) to every exported symbol. It is supported since at least
GNU binutils 2.22 in 2011 (older versions not tested).
With this version definition, newly-linked binaries that depend on the
json-glib shared library will refer to its symbols in a versioned form,
preventing their references from being resolved to a symbol of the same
name exported by json-c or libjansson if those libraries appear in
dependency search order before json-glib, which will usually result in
a crash. This is necessary because ELF symbol resolution normally uses
a single flat namespace, not a tree like Windows symbol resolution.
At least one symbol (json_object_iter_next()) is exported by all three
JSON libraries.
Linking with -Bsymbolic is not enough to have this effect in all cases,
because -Bsymbolic only affects symbol lookup within a shared object,
for example when json_from_string() calls json_parser_new(). It does
not affect symbol lookup when external code calls into json-glib,
for example when libedataserver calls json_parser_new().
This change will also not prevent code that depends on json-c or
libjansson from finding json-glib's symbols and crashing; to prevent
that, a corresponding change in json-c or libjansson would be needed.
Adding a symbol-version is a backwards-compatible change, but once
added, removing or changing the symbol-version would be an incompatible
change that requires a SONAME bump.
Partially resolves https://gitlab.gnome.org/GNOME/json-glib/-/issues/33
and https://gitlab.gnome.org/GNOME/glib/-/issues/2147.
Signed-off-by: Simon McVittie <smcv collabora com>
meson.build | 1 +
1 file changed, 1 insertion(+)
---
diff --git a/meson.build b/meson.build
index f84d865..67d2a5e 100644
--- a/meson.build
+++ b/meson.build
@@ -136,6 +136,7 @@ if host_system == 'linux'
'-Wl,-Bsymbolic',
'-Wl,-z,relro',
'-Wl,-z,now',
+ '-Wl,--default-symver',
])
endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]