View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0004879 | The Dark Mod | Coding | public | 02.09.2018 05:57 | 02.09.2018 06:41 |
Reporter | stgatilov | Assigned To | stgatilov | ||
Priority | normal | Severity | major | Reproducibility | sometimes |
Status | resolved | Resolution | fixed | ||
Platform | Linux | OS | Ubuntu | OS Version | 14.04 |
Product Version | TDM 2.06 | ||||
Target Version | TDM 2.07 | Fixed in Version | TDM 2.07 | ||
Summary | 0004879: TDM binary crashes during startup on old Linux | ||||
Description | Originally reported here: http://forums.thedarkmod.com/topic/19613-glibcxx-relocation-error/ When starting TDM official Linux build, it immediately crashes with error: ./thedarkmod.x86: relocation error: ./thedarkmod.x86: symbol _ZTVNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEE, version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference At least the following OSes are affected: Ubuntu 14.04 LTS (released in 2014) Linux Mint 17.3 Rosa (released in 2015) | ||||
Tags | No tags attached. | ||||
From forum: GCC broke ABI of C++ standard library for std::string and std::list. This is perhaps the only known case when they did so, and they had to do so to adhere to new C++11 standard. While breaking ABI by default, they allowed to return back to the old ABI if wanted (in exchange for not being C++11-compliant). TDM 2.06 binaries were compiled with C++11 with the new C++11 ABI. If you have old version of C++ standard library (it is something like glibc or glibcxx or libstdc++), then you cannot run these binaries. The only way to run the new binary is to get newer version of C++ standard libs somehow and make sure TDM uses them. Alternative solution is to rebuild TDM from source code. In order to build with old C++ ABI on new Linux, you have to add the following line: BASECPPFLAGS.append( '-D_GLIBCXX_USE_CXX11_ABI=0' ) into SConstruct file at source code root directory, and then build according to wiki instructions. The resulting binary would be compatible with old C++ libraries, so you will be able to run it. If you have old GCC/Linux, then even this define is not necessary. |
|
Reverted to old ABI in svn rev 7675. Now no matter where you build TDM, the GCC-produced binaries should run both on old and new OS-es. |
|
Date Modified | Username | Field | Change |
---|---|---|---|
02.09.2018 05:57 | stgatilov | New Issue | |
02.09.2018 05:57 | stgatilov | Status | new => assigned |
02.09.2018 05:57 | stgatilov | Assigned To | => stgatilov |
02.09.2018 05:59 | stgatilov | Note Added: 0010748 | |
02.09.2018 06:19 | stgatilov | Note Added: 0010749 | |
02.09.2018 06:19 | stgatilov | Status | assigned => resolved |
02.09.2018 06:19 | stgatilov | Resolution | open => fixed |
02.09.2018 06:41 | stgatilov | Fixed in Version | => TDM 2.07 |