From: Alan W. I. <ir...@be...> - 2017-06-28 01:00:43
|
On 2017-06-27 18:22-0000 Arjen Markus wrote: > Hi Alan, > > > > I could say "I have good news and bad news". First of all, with this latest version I can indeed build the wxWidgets driver without complaints, using the 64-bits version of MinGW-w64/MSYS2, but when I run an example I get: > > > > [cid:image001.png@01D2EF82.D7F76F70] > > > > I guess this means that I should be using _exactly_ the same compiler to build PLplot as was used to build the wxWidgets libraries. Quite possibly the easiest way is to build these libraries from source, so that there can be no mismatch - sigh. Hi Arjen: I think your proposed solution would work, but I propose a much more convenient solution below concerning this ABI incompatibility issue that is based on some google research I did. For the record, here is the message in that fatal error message box image (which I will cut and paste to the MSYS2 mailing list when I follow up there). Mismatch between the program and library build versions detected. The library used 3.0 (wchar_t,compiler with C++ ABI 1008,wx containers,compatible with 2.8), and your program used 3.0 (wchar_t,compiler with C++ ABI 1010,wx containers,compatible with 2.8). When faced with a fatal error like that, google is your friend. Indeed, when I made a google search for the terms <"c++" abi 1008 1010>, I quickly found a discussion about how strict wxwidgets should be concerning its default rule that C++ ABI version numbers should be exactly identical (as you discovered above). Furthermore, <https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html> states the ABI versioning scheme for a relatively old version of gcc is GCC 3.4, GCC 4.x: 1000 + n (when n>1) If that scheme contines for the g++ versions available for MinGW-w64/MSYS2, it appears from the above notice, that the MinGW-w64/MSYS2 developers built the wxwidgets libraries implicitly with -fabi-version=8, and you built the wxwidgets components of PLplot with -fabi-version=10. Furthermore, from <https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html> ABI versions 1008, 1009, 1010, and 1011 first appeared in g++ versions 4.9, 5.2, 6.1, and 7. Finally, I found <https://github.com/Alexpux/MINGW-packages/blob/master/mingw-w64-wxwidgets/wxWidgets-3.0.2-relax-abi-compatibility-gcc.patch> which relaxes the default strict ABI compatibility rule for wxwidgets BUT only for the ABI range 1002-1008. So this patch does mean the above error will occur for your case (1008 and 1010). In sum from this google research based on the above error message, I am pretty sure what happened is that the MinGW-w64/MSYS2 wxwidgets libraries were built with some g++ version from 4.9.z through g++ 5.1.z, and you are building the wxwidgets components of PLplot using g++ version 6.x.y, where x is 1 or greater. Furthermore, from the above Dialect options site, I believe all you have to do to avoid this issue is specify -fabi-version=8 as a g++ option (e.g., by adding that option to the CXXFLAGS environment variable). I am going to follow up with a short version of this to the MSYS2 mailing list asking if setting -fabi-version=8 is the right response to the above error message, but please go ahead and try that experiment right away, and don't wait for their comments (if any). Alan __________________________ Alan W. Irwin Astronomical research affiliation with Department of Physics and Astronomy, University of Victoria (astrowww.phys.uvic.ca). Programming affiliations with the FreeEOS equation-of-state implementation for stellar interiors (freeeos.sf.net); the Time Ephemerides project (timeephem.sf.net); PLplot scientific plotting software package (plplot.sf.net); the libLASi project (unifont.org/lasi); the Loads of Linux Links project (loll.sf.net); and the Linux Brochure Project (lbproject.sf.net). __________________________ Linux-powered Science __________________________ |