For visitors to this page from the future, for example if you have been directed here by the build error message that you get when using GLIBCXX_DEBUG together with an LP build: it should be theoretically possible to have both an LP build and GLIBCXX_DEBUG. If you are interested in this, or even interested in working on this, let us know.
I think there are two ways of making GLIBCXX_DEBUG compatible with LP solvers:
1. Compile OSI with GLIBCXX_DEBUG.
2. Get rid of the OSI dependency.
Neither is trivial: for the first, we would need to use two different versions of OSI depending on the build configuration, which sounds like it would require a bit of CMake-fu. The second requires building our own adapter layer for the LP solvers we want to support. This is a bit of coding work, but it's something we've been interested in independently of this issue. There may be an open issue for this, but I couldn't find one immediately.
The above assumes that OSI is the only library we use that is affected by GLIBCXX_DEBUG, but this would need to be checked. As far as I understand, GLIBCXX_DEBUG needs to be set consistently between parts of the code that exchange STL containers with each other (because the flag changes their memory layout etc.).
I would be surprised if CPLEX used STL containers in its interface because this is difficult to do when you only ship a binary and need to compatible with a wide variety of C++ setups. So libraries like CPLEX often have a C-style interface rather than a C++-style interface, or at least don't use STL containers in their interface functions and classes, and then these issues should not apply. But that's just a guess.
For Soplex, I'd be less surprised if it used a C++-style interface that requires a compatible STL implementation on both sides. But I also wouldn't be surprised if it doesn't. Much number-crunching is done using languages other than C++, and a C interface is much easier to integrate with other programming languages than a C++ interface.
|