Download

4.23 CentOS 7 toolchain is using a too-new version of libstdc++

I’ve documented my issue here: C++ Transition Guide for 4.23 - Unreal Engine Forums

Short version: we develop with UE4 on CentOS 7. As of 4.23, the UE4-provided CentOS 7 toolchain now uses libstdc++.so.6.0.21. CentOS 7 (and, I believe, 8 as well) currently only provide libstdc++.so.6.0.19.

In release builds, there seems to be no issue. UE4 only seems to utilize code from the older version of the library (i.e. it only requires GLIBCXX_3.4.19).

In debug builds, however, the MeshBuilder module apparently somehow (haven’t figured out quite how yet) utilizes std::logic_error. I guess something about this stl class changed between the two versions of libstdc++. The debug builds look for the symbol: _ZNSt11logic_errorC2EPKc, which is only satisfied by GLIBCXX_3.4.21, which in turn is only defined in the newer libstdc++.so.6.0.21. The editor binary will not launch. The release version of the module doesn’t seem to utilize std::logic_error.

If I manually replace libstdc++ in the toolchain with the older version (from the 4.21 or 4.22 era, which both appear to be the same version that comes with CentOS), MeshBuilder is content with the symbol: _ZTVSt11logic_error, which is satisfied by GLIBCXX_3.4.19, which is the highest version defined in the libstdc++ that comes with the OS.

In summary: it seems you have upgraded the 4.23 CentOS 7 toolchain’s libstdc++ beyond what CentOS 7 actually provides and allows clients to use. At the moment, it is only causing a problem in debug mode (which may be why you hadn’t caught it). If you could roll back to the older libstdc++, it would be greatly appreciated! Note that I believe you should still be able to use clang 8.0.1.

I suppose perhaps this should be filed as a bug report?