View Issue Details

IDProjectCategoryView StatusLast Update
0004879The Dark ModCodingpublic02.09.2018 06:41
Reporterstgatilov Assigned Tostgatilov  
PrioritynormalSeveritymajorReproducibilitysometimes
Status resolvedResolutionfixed 
PlatformLinuxOSUbuntuOS Version14.04
Product VersionTDM 2.06 
Target VersionTDM 2.07Fixed in VersionTDM 2.07 
Summary0004879: TDM binary crashes during startup on old Linux
DescriptionOriginally 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)
TagsNo tags attached.

Activities

stgatilov

stgatilov

02.09.2018 05:59

administrator   ~0010748

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.
stgatilov

stgatilov

02.09.2018 06:19

administrator   ~0010749

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.

Issue History

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