summaryrefslogtreecommitdiff
path: root/tools/g++5ABIcheck/README
blob: 0017bf89428c076d242c0d0ef1b93060ce306728 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
g++5 ABI test tool
==================

This is a simple tool to test a system for g++5's libstdc++ at runtime.

GCC5.1 introduced a new library ABI for the C++ standard library.
The old 3.4 .. 5.0 ABI is not compatible.

Some GNU/Linux distributions systems switched to the new ABI already
and compile plugins with the new gcc.

If a plugin uses a c++ library that is also shipped with ardour-bundles,
the ABI of that library must match. Currently known cases: gtkmm, glibmm.

e.g. Ingen or eq10q provided by a distro compiled with gcc5 will not
load in Ardour as provided by ardour.org compiled with gcc4 because ardour
ships an incompatible gtkmm, glibmm, cairomm, ...

The plugin will fail to load. For example:

```
suil error: Unable to open UI library /usr/lib/lv2/sapistaEQv2.lv2/gui/eq10qs_gui.so (/usr/lib/lv2/sapistaEQv2.lv2/gui/eq10qs_gui.so: undefined symbol: _ZN4Glib7ustringC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE)
suil error: Unable to open UI library /usr/lib/lv2/vocproc.lv2/vocproc_gui.so (/usr/lib/lv2/vocproc.lv2/vocproc_gui.so: undefined symbol: _ZN3Gtk7Builder13add_from_fileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE)
lilv_lib_open(): error: Failed to open library /usr/lib/lv2/ingen.lv2/libingen_lv2.so (/usr/lib/libingen.so.0: undefined symbol: _ZN4Glib6ModuleC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_11ModuleFlagsEEE)
```

ie `Glib::ustring::ustring(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)`


Compilation
-----------

This tool must be compiled on a system with gcc5.1 or later.

   make

will fail the resulting binary does not use the new __cxx11 ABI.
The resulting binary will *not* run on systems with only the old ABI.

For convenience (packaging gcc4 builds), pre-compiled binaries are included.


Check
-----

The idea is to include the precompiled binaries in the installer

 - Ardour/gcc-4 installer must fail if the binary runs
 - Ardour/gcc-5 installer must fail if the binary does not run


References
----------

https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html
https://wiki.debian.org/GCC5
https://mail.gnome.org/archives/gtkmm-list/2015-June/thread.html