Jump to content
The Dark Mod Forums
Sign in to follow this  
McGriffin

GLIBCXX relocation error

Recommended Posts

Hi there,
first of all,
sorry for my bad english,
my first lang. is german.

I'm new to the game +
i don't know so ! much about linux & gaming

I'm on
System: Host-Kernel: 4.4.0-133-generic x86_64 (64 bit) Desktop: KDE Plasma 4.14.2
Distro: Linux Mint 17.3 Rosa
Machine: System: Dell product: OptiPlex 755
Mobo: Dell model: 0GM819 Bios: Dell v: A22 date: 06/11/2012
CPU: Quad core Intel Xeon X3380 (-HT-MCP-) cache: 6144 KB
clock speeds: max: 3166 MHz 1: 2333 MHz 2: 2000 MHz 3: 2000 MHz 4: 2000 MHz
Graphics: Card: NVIDIA Device 1c82
Display Server: X.Org 1.15.1 drivers: nvidia (unloaded: fbdev,vesa,nouveau)
Resolution: 1920x1080@60.0hz, 1920x1080@60.0hz
GLX Renderer: GeForce GTX 1050 Ti/PCIe/SSE2 GLX Version: 4.5.0 NVIDIA 384.130
Audio: Card-1 NVIDIA Device 0fb9 driver: snd_hda_intel Sound: ALSA v: k4.4.0-133-generic
Card-2 C-Media CMI8788 [Oxygen HD Audio] driver: snd_virtuoso
Card-3 Intel 82801I (ICH9 Family) HD Audio Controller driver: snd_hda_intel

I did this:
http://wiki.thedarkmod.com/index.php?title=Installer_and_Manual_Installation#Installing_TDM_on_Linux.2C_manually
+
a workaround for the libstdc++.so.6.
I found on the net

the output of
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX is
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_DEBUG_MESSAGE_LENGTH

because of not enough space I'm on an external path with the game (-s)
so after this i did tdm_update.linux
& it ran just fine


if I try to lounge TDM...
no ! matter if ./thedarkmod.x86 or ./thedarkmod.x64...
the output is:
relocation error: /my/path/to/darkmod/thedarkmod.x86 or .x64:
symbol _ZTVNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEE, version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference

anyone any ideas how to handle this ?

please help

thank you

Edited by McGriffin

Share this post


Link to post
Share on other sites

Hi everyone. I am receiving a similar error to McGriffin:

 

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

 

 

OS: Ubuntu 14.04 LTS 64 bit

CPU: AMD A6-6400K APU with Radeon HD Graphics × 2

GPU: Gallium 0.4 on AMD CAPE VERDE

Share this post


Link to post
Share on other sites

Im not an expert on this,

so i googled the error: "version GLIBCXX_3.4.21 not defined in file libstdc++.so.6"

There a more people having this problem, outside TDM. And they found some solutions.

 

Please let us know what the solution is.

Edited by freyk

Share this post


Link to post
Share on other sites

Thank you frey for helping my me ;)

It seems like no solution outside TDM,
which optional,
or possibly self-recognizing setting options for the compatibility of the intervening system should bring.


Just like I like it from the results,
as a result of this topic:
https://github.com/typora/typora-issues/issues/504#issuecomment-280662005,

(libstdc ++ 6 & GCC 5.1)
read out,
there were changes,
(Https://www.gnu.org/software/gcc/gcc-5/changes.html)
the two options to choose from.

Who saw it,
I use plasma 4 (as a desktop)
to set up a new system
with without this,
or to start fumbling ...
not even talking about
because of a game!
is absolutely no! option
... for me!

So there is only a gcc-downgrade as an option.

Let's take a look ...

https://packages.debian.org/search?keywords=gcc-5.1

https://packages.debian.org/search?keywords=gcc-5

https://packages.debian.org/sid/gcc-5

The intsallation of the package,
which is on the last link to download,
would result
my system would be deficient,
because now another version,
with less! Features are available,
what kind of tools means death.

And this,
although TDM already ran with 5.1
and just a patch would have to be provided
which avoids this madness.

Really off topic

did you read that comment?

"P.S. funny thing, _ZNSt7__cxx11: CXX11, but we do not really read error messages."

The problem is always understanding!

Linux has taught me a lot about systems.
... about political ...
hierarchy,
the financial sector (HJR192),
the nutritional area,
the environment area,
the religious,
especially the christian area
WHAT IS THE motu proprio?

What are bankruptcy jurisdictions?



What happened in 2012… by OPPT


Be aware of it
who you are
and what you are

What does it mean ?
A human is one.
You have a natural person
A PERSON you get unimplemented
...to be !

did you contradict that?

What are trust relationships?
Are you…
Are you someone who is familiar?

DO you TRUST ?


I hope not.
Because yours is the kingdom of heaven !!!

respective Johannes 4:4



and peace be upon you

regards

Share this post


Link to post
Share on other sites

Yes, the dependencies can drive you crazy.

 

The moto proprio is a way of keeping the fantasy alive by giving infallible power to a group of chumps that are hanging desperately onto some fairy tales from the past.

 

sudo ppa-purge ppa:ubuntu-toolchain-r/test
Results in:
./thedarkmod.x86.
/thedarkmod.x86: /usr/lib32/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by ./thedarkmod.x86)
./thedarkmod.x86: /usr/lib32/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./thedarkmod.x86)
./thedarkmod.x86: /usr/lib32/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./thedarkmod.x86)
./thedarkmod.x86: /usr/lib32/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ./thedarkmod.x86)
Hopefully someone comes up with a simple solution.
Cheers

Share this post


Link to post
Share on other sites
The moto proprio is a way of keeping the fantasy alive by giving infallible power to a group of chumps that are hanging desperately onto some fairy tales from the past.

 

it's the opposite

 

they had...

 

just be sovereign the sovereign

 

|_|]

prosito

Share this post


Link to post
Share on other sites
Really off topic

 

 

Let's keep the off topic stuff in the appropriate forum.

Share this post


Link to post
Share on other sites

Yes, sorry Springheel I thought it was funny. Love your work man. Its been a while since I've been able to get darkmod 2.06 running, am starting to miss it. I was wondering if it is possible to build an older version on linux?

 

* I've found a backed up old version of 2.05 and copied it across and am also able to use darkradiant again.

Edited by Aldo

Share this post


Link to post
Share on other sites

Ok, here is how it works.

 

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.

I have no idea if it is possible to install it in Ubuntu 14.04 and if it is allowed/forbidden to have many versions of it at once in Linux.

 

Alternative solution is to rebuild TDM from source code.

In order to build with old C++ ABI, 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.

 

Now there are two questions:

1) Are you OK with compiling TDM from source, or should I compile tdm 2.06 for you?

2) Should we switch to old ABI in SVN, so that TDM 2.07 could be run on Ubuntu 14.04?

 

The question 2 is mostly for TDM developers I guess.

Given that we try to support Windows XP for one last time in TDM 2.07, it is quite stupid that it is not possible to run it on Ubuntu 14 :laugh:

  • Like 1

Share this post


Link to post
Share on other sites

Ok, here is how it works.

 

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.

I have no idea if it is possible to install it in Ubuntu 14.04 and if it is allowed/forbidden to have many versions of it at once in Linux.

 

Alternative solution is to rebuild TDM from source code.

In order to build with old C++ ABI, 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.

 

Now there are two questions:

1) Are you OK with compiling TDM from source, or should I compile tdm 2.06 for you?

2) Should we switch to old ABI in SVN, so that TDM 2.07 could be run on Ubuntu 14.04?

 

The question 2 is mostly for TDM developers I guess.

Given that we try to support Windows XP for one last time in TDM 2.07, it is quite stupid that it is not possible to run it on Ubuntu 14 :laugh:

How do they work around it with all other Linux C++ software? Do they build it on user's system or ???

Share this post


Link to post
Share on other sites

Thank you stgatilov for that explanation, now I know why fiddling around with libstdc++ felt like bashing my head against the wall. I'll try to compile from source.......

Share this post


Link to post
Share on other sites

...I added the BASECPPFLAGS.append line to the construct file and updated gcc and am compiling ...

 

Share this post


Link to post
Share on other sites

... and it works!! only TDM 2.06 now runs with a blank screen.

 

* whoops put it in the old tdm 2.05 directory. Works fine in the right directory. Thanks heaps for the help :D

Edited by Aldo

Share this post


Link to post
Share on other sites

Will that not break it for newer linux systems?

No, it will not.

 

The old versions of glibcxx have only the old ABI in it, since they had no idea about the new stuff at that time.

The new versions of glibcxx have both the old and the new ABI in it. So you will be able to run both old and new applications.

 

BTW, the tdm_update 2.06 was/is built against old ABI.

The reason to do so is that it is using boost, and without switching to old ABI I would have to rebuild boost static libs, which I didn't want to.

For the same reason, the main TDM code was also built against old ABI: starting from x64 branch merge and ending at boost removal.

It turns out that I should have kept TDM at old ABI when I removed boost, but I did not see any sense in doing so at that moment.

Share this post


Link to post
Share on other sites

2.07 isn't out yet.

 

The FBO beta (AKA 2.07 beta) at moddb is what is publicly available:

 

https://www.moddb.com/mods/the-dark-mod/downloads/tdm-206-vertex-buffer-beta

 

Requires 2.06 assets.

 

I'll be updating the package once Shadow Maps stabilize in SVN.


Please visit TDM's IndieDB site and help promote the mod:

 

http://www.indiedb.com/mods/the-dark-mod

 

(Yeah, shameless promotion... but traffic is traffic folks...)

Share this post


Link to post
Share on other sites

Steps to build TDM 2.06 on ubuntu:

 

1. Follow the Installing TDM manually instructions: http://wiki.thedarkmod.com/index.php?title=Installer_and_Manual_Installation#Installing_TDM_on_Linux.2C_manually

 

But install in your home folder /darkmod instead of /usr/share/games/darkmod

 

2. Download the source code http://www.thedarkmod.com/downloads/ and extract into your home folder /darkmod_src

 

3. Update GCC and G++:

 

sudo apt-get update && sudo apt-get install build-essential software-properties-common -y && sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y && sudo apt-get update && sudo apt-get install gcc-snapshot -y && sudo apt-get update && sudo apt-get install gcc-6 g++-6 -y && sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-6 && sudo apt-get install gcc-4.8 g++-4.8 -y && sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8;

 

4. In your file manager go to /darkmod_src directory edit SConstruct and add the line of code as follows:

 

....# C++11 features
BASECPPFLAGS.append( '-std=c++11' )
# maintain this dangerous optimization off at all times
BASECPPFLAGS.append( '-fno-strict-aliasing' )
# In order to build with old C++ ABI, you have to add the following line:
BASECPPFLAGS.append( '-D_GLIBCXX_USE_CXX11_ABI=0' )
if ( g_os == 'Linux' ):
# gcc 4.x option only - only export what we mean to from the game SO
BASECPPFLAGS.append( '-fvisibility=hidden' )....
sudo apt-get install scons //'scons' is currently not installed
sudo apt-get install m4 //'SCons Environment' object has no attribute 'M4'
sudo apt-get install subversion //svnversion: not found
sudo apt-get install mesa-common-dev //no such file: "Gl/gl.h"
sudo apt-get install libxxf86vm-dev //no such file: "X11/extensions/xf86vmode.h"
sudo apt-get install libopenal-dev //no such file: "AL/al.h"
sudo apt-get install libxext-dev //no such file: "X11/extensions/Xext.h"

 

6. Then run the build either:

scons BUILD="release" TARGET_ARCH="x86" .. //on 32-bit OS
scons BUILD="release" TARGET_ARCH="x64" .. //on 64-bit OS

 

7. This will create a new thedarkmod.x86 or thedarkmod.x64 file in the /darkmod folder, make it executable:

chmod uga+x ./thedarkmod.x64

 

8. Run

./thedarkmod.x64

Edited by Aldo

Share this post


Link to post
Share on other sites

 

 

But install in your home folder /darkmod instead of /usr/share/games/darkmod


what if I cant do it under home folder AND /usr/share/games/... ?

I NEED TO HAVE THAT EXTERNAL PATH
for the sake of clarity,
I repeat that

Share this post


Link to post
Share on other sites

Then just put the folder in your external path, you have to have /darkmod and /darkmod-src in the same folder for the build that's all.

Share this post


Link to post
Share on other sites

Then just put the folder in your external path, you have to have /darkmod and /darkmod-src in the same folder for the build that's all.

a-ha...

 

relocation error: /my/path/to/darkmod/thedarkmod.x64: symbol _ZTVNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEE, version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference

 

Edited by McGriffin

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...