diff options
author | Robin Gareus <robin@gareus.org> | 2015-09-11 12:36:08 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-09-11 12:40:39 +0200 |
commit | 6f038a61b5831d3edc885657355dda900e6e6b28 (patch) | |
tree | b3ea2827752a9cddfd1d94a347961841cc7fd6b1 /tools | |
parent | def273ea7124ca306b831247a173e948fc03895b (diff) |
add gcc5 ABI test tool
Diffstat (limited to 'tools')
-rw-r--r-- | tools/g++5ABIcheck/Makefile | 6 | ||||
-rw-r--r-- | tools/g++5ABIcheck/README | 57 | ||||
-rwxr-xr-x | tools/g++5ABIcheck/gcc5stc++test.i386-linux-gnu | bin | 0 -> 4516 bytes | |||
-rwxr-xr-x | tools/g++5ABIcheck/gcc5stc++test.x86_64-linux-gnu | bin | 0 -> 6064 bytes | |||
-rw-r--r-- | tools/g++5ABIcheck/test.cc | 13 |
5 files changed, 76 insertions, 0 deletions
diff --git a/tools/g++5ABIcheck/Makefile b/tools/g++5ABIcheck/Makefile new file mode 100644 index 0000000000..3061785a87 --- /dev/null +++ b/tools/g++5ABIcheck/Makefile @@ -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 diff --git a/tools/g++5ABIcheck/README b/tools/g++5ABIcheck/README new file mode 100644 index 0000000000..0017bf8942 --- /dev/null +++ b/tools/g++5ABIcheck/README @@ -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 diff --git a/tools/g++5ABIcheck/gcc5stc++test.i386-linux-gnu b/tools/g++5ABIcheck/gcc5stc++test.i386-linux-gnu Binary files differnew file mode 100755 index 0000000000..86788583d7 --- /dev/null +++ b/tools/g++5ABIcheck/gcc5stc++test.i386-linux-gnu diff --git a/tools/g++5ABIcheck/gcc5stc++test.x86_64-linux-gnu b/tools/g++5ABIcheck/gcc5stc++test.x86_64-linux-gnu Binary files differnew file mode 100755 index 0000000000..8ee0b27e1b --- /dev/null +++ b/tools/g++5ABIcheck/gcc5stc++test.x86_64-linux-gnu diff --git a/tools/g++5ABIcheck/test.cc b/tools/g++5ABIcheck/test.cc new file mode 100644 index 0000000000..c3a915c029 --- /dev/null +++ b/tools/g++5ABIcheck/test.cc @@ -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; +} |