13
0

remove old gcc ABI (libstc++) test tool

This commit is contained in:
Robin Gareus 2015-09-26 18:42:38 +02:00
parent 0613b7517c
commit 9a47744fc0
5 changed files with 0 additions and 76 deletions

View File

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

View File

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

View File

@ -1,13 +0,0 @@
#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;
}