add gcc5 ABI test tool
This commit is contained in:
parent
def273ea71
commit
6f038a61b5
6
tools/g++5ABIcheck/Makefile
Normal file
6
tools/g++5ABIcheck/Makefile
Normal 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
57
tools/g++5ABIcheck/README
Normal 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
|
BIN
tools/g++5ABIcheck/gcc5stc++test.i386-linux-gnu
Executable file
BIN
tools/g++5ABIcheck/gcc5stc++test.i386-linux-gnu
Executable file
Binary file not shown.
BIN
tools/g++5ABIcheck/gcc5stc++test.x86_64-linux-gnu
Executable file
BIN
tools/g++5ABIcheck/gcc5stc++test.x86_64-linux-gnu
Executable file
Binary file not shown.
13
tools/g++5ABIcheck/test.cc
Normal file
13
tools/g++5ABIcheck/test.cc
Normal 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user