13
0

add gcc5 ABI test tool

This commit is contained in:
Robin Gareus 2015-09-11 12:36:08 +02:00
parent def273ea71
commit 6f038a61b5
5 changed files with 76 additions and 0 deletions

View File

@ -0,0 +1,6 @@
all:
g++ -o gcc5stc++test.`gcc -print-multiarch` test.cc -Wall -std=c++11 -O0
nm gcc5stc++test.`gcc -print-multiarch` | c++filt | grep -q __cxx11
strip gcc5stc++test.`gcc -print-multiarch`
.PHONY: all

57
tools/g++5ABIcheck/README Normal file
View File

@ -0,0 +1,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

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,13 @@
#include <cstdio>
#include <string>
void check (std::string const& str) {
std::printf ("%s\n", str.c_str());
}
int main (int argc, char **argv) {
std::printf ("gcc %s\n", __VERSION__);
std::string test("gcc5/libstc++11");
check (test);
return 0;
}