Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
steam+primus does not find symbol
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index Multimedia
View previous topic :: View next topic  
Author Message
Holysword
l33t
l33t


Joined: 19 Nov 2006
Posts: 946
Location: Greece

PostPosted: Sat Sep 09, 2017 9:22 am    Post subject: steam+primus does not find symbol Reply with quote

Whenever I try to start a Steam game via primusrun %command% I get the following error in the console:

Code:
/bin/bash: relocation error: /usr/lib64/primus/libGL.so.1: symbol _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev, version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference


I did upgrade my system recently (which I deeply regret). My currently selected GCC profile is x86_64-pc-linux-gnu-6.3.0, and I have already ran `revdep-rebuild --library 'libstdc++.so.6' -- --exclude gcc` to no effect. I have rebuild primus also, also to no effect.

primsrun glxspheres works fine, as well as primusrun glxspheres64

Does anyone have any clue of which package I should rebuild to get primus working again? Or there is something wrong with the paths?

Thanks in advance!
_________________
"Nolite arbitrari quia venerim mittere pacem in terram non veni pacem mittere sed gladium" (Yeshua Ha Mashiach)
Back to top
View user's profile Send private message
Hu
Moderator
Moderator


Joined: 06 Mar 2007
Posts: 21586

PostPosted: Sat Sep 09, 2017 5:39 pm    Post subject: Reply with quote

The missing symbol is the post-update name. I suspect that the program is somehow finding a pre-upgrade libstdc++. Steam is notorious for bundling libraries they should not, so this would explain why your basic GLX test works correctly, but your Steam game fails. What is the output of (cd /path/to/steam/files && find . -name libstdc++\* -ls)? I used a cd to anonymize the path. Otherwise you could have given the path instead of ..

In some cases, users have reported success by denying Steam access to the bundled copy and forcing it to use the system copy instead. Keep a backup of the file if you try this, since it is a context-dependent solution and we currently do not know if that will help.
Back to top
View user's profile Send private message
Holysword
l33t
l33t


Joined: 19 Nov 2006
Posts: 946
Location: Greece

PostPosted: Mon Sep 11, 2017 4:22 pm    Post subject: Reply with quote

Hu wrote:
The missing symbol is the post-update name. I suspect that the program is somehow finding a pre-upgrade libstdc++. Steam is notorious for bundling libraries they should not, so this would explain why your basic GLX test works correctly, but your Steam game fails. What is the output of (cd /path/to/steam/files && find . -name libstdc++\* -ls)? I used a cd to anonymize the path. Otherwise you could have given the path instead of ..

In some cases, users have reported success by denying Steam access to the bundled copy and forcing it to use the system copy instead. Keep a backup of the file if you try this, since it is a context-dependent solution and we currently do not know if that will help.


Indeed you're right; there are a bunch of versions of libstdc++ in $HOME/.local/share/Steam. I didn't think that they would be favoured, however, 'cause of the STEAM_RUNTIME_PREFER_HOST_LIBRARIES=1 environment variable. Steam's libraries seem to be compiled with gcc-4.6, so anything with gcc-5 or later will cause troubles.

Which is troublesome in itself. It does have libGLES, libGLEW and libGLU, but it is trying to use libGL from the system. Mixing system and Steam's libs do not sound like a good idea in any case.

Is there any beautiful mechanism in Gentoo which will allow me to keep one version of libGL compiled specially with gcc-4.6 to be used by Steam, or is that asking too much? :cry:
_________________
"Nolite arbitrari quia venerim mittere pacem in terram non veni pacem mittere sed gladium" (Yeshua Ha Mashiach)
Back to top
View user's profile Send private message
Hu
Moderator
Moderator


Joined: 06 Mar 2007
Posts: 21586

PostPosted: Mon Sep 11, 2017 11:48 pm    Post subject: Reply with quote

I am not aware of one. Perhaps you could get the Steam developers (not the Gentoo maintainers for Steam, but Valve's employees) to fix their workflow. They should have updated to gcc-5 by now. They also shouldn't be bundling so many libraries, but convincing them of their error there is unlikely.
Back to top
View user's profile Send private message
Holysword
l33t
l33t


Joined: 19 Nov 2006
Posts: 946
Location: Greece

PostPosted: Tue Sep 12, 2017 5:34 pm    Post subject: Reply with quote

Hu wrote:
I am not aware of one. Perhaps you could get the Steam developers (not the Gentoo maintainers for Steam, but Valve's employees) to fix their workflow. They should have updated to gcc-5 by now. They also shouldn't be bundling so many libraries, but convincing them of their error there is unlikely.


I cannot argue with them in that aspect. The games will come precompiled, there is no way around that. What would happen if the game compiled with gcc4 is dynamically linked to my system library compiled with gcc6? Some games ship their own versions of some of libraries in Steam Runtime.
_________________
"Nolite arbitrari quia venerim mittere pacem in terram non veni pacem mittere sed gladium" (Yeshua Ha Mashiach)
Back to top
View user's profile Send private message
Hu
Moderator
Moderator


Joined: 06 Mar 2007
Posts: 21586

PostPosted: Wed Sep 13, 2017 12:59 am    Post subject: Reply with quote

Mixing gcc4 with gcc6 should be fine if they stick to supported interfaces. There will be problems, like the ones you saw here, if they rely on symbols which changed ABI. The only solution is for someone to rebuild the code with the new ABI. We can't do that for them since they refuse to release the source, so the problem falls to them. In most cases, a straight rebuild is all that is required. No code changes, so this should be very easy for them to do.
Back to top
View user's profile Send private message
Holysword
l33t
l33t


Joined: 19 Nov 2006
Posts: 946
Location: Greece

PostPosted: Fri Sep 29, 2017 10:59 am    Post subject: Reply with quote

Hu wrote:
Mixing gcc4 with gcc6 should be fine if they stick to supported interfaces. There will be problems, like the ones you saw here, if they rely on symbols which changed ABI. The only solution is for someone to rebuild the code with the new ABI. We can't do that for them since they refuse to release the source, so the problem falls to them. In most cases, a straight rebuild is all that is required. No code changes, so this should be very easy for them to do.


I think it is "asking too much" to tell them that. Most developers are completely unaware of those intricacies and for a good reason - to each their speciality.

I'm just adding here the information that this is a relatively known complaint about Steam. People have been asking when they will release a Steam Runtime environment compiled with GCC-5 and GCC-6, but the the developers would all have to recompile their games with the new libstdc++. The only reasonable solution, as it seems, is to favour static linking for libstdc++ rather than dynamic.
_________________
"Nolite arbitrari quia venerim mittere pacem in terram non veni pacem mittere sed gladium" (Yeshua Ha Mashiach)
Back to top
View user's profile Send private message
Hu
Moderator
Moderator


Joined: 06 Mar 2007
Posts: 21586

PostPosted: Fri Sep 29, 2017 11:17 pm    Post subject: Reply with quote

Steam already bundles plenty of libraries. It shouldn't be a big issue for them to bundle multiple versions of libstdc++ and select which to use based on whether the game has been updated.

I'd definitely like to see more Steam games statically link libstdc++ though. As I read the libstdc++ license, static linking it would obligate them to license the main executable under the GNU General Public License, at which point they'd have to release the source to customers, and then we could rebuild it with the proper options. :)
Back to top
View user's profile Send private message
Holysword
l33t
l33t


Joined: 19 Nov 2006
Posts: 946
Location: Greece

PostPosted: Sat Sep 30, 2017 1:01 pm    Post subject: Reply with quote

Hu wrote:
Steam already bundles plenty of libraries. It shouldn't be a big issue for them to bundle multiple versions of libstdc++ and select which to use based on whether the game has been updated.

I'd definitely like to see more Steam games statically link libstdc++ though. As I read the libstdc++ license, static linking it would obligate them to license the main executable under the GNU General Public License, at which point they'd have to release the source to customers, and then we could rebuild it with the proper options. :)


Yeah, right. We might as well wait for the end of world hunger while we're at that :P

If that's the case, I don't see how gaming in Linux would have any future. We cannot expect developers to keep reworking their 10 years old games to conform the new interfaces of newer libraries. Also expecting Steam to keep track of all sort of combinations of old and new libraries and providing them in an extended period of time is quite unrealistic.

I wish Linux community would bend a little bit in order to fit the market.
_________________
"Nolite arbitrari quia venerim mittere pacem in terram non veni pacem mittere sed gladium" (Yeshua Ha Mashiach)
Back to top
View user's profile Send private message
Hu
Moderator
Moderator


Joined: 06 Mar 2007
Posts: 21586

PostPosted: Sat Sep 30, 2017 4:50 pm    Post subject: Reply with quote

I am not aware of anything more than a simple rebuild required for this upgrade. If the vendor has kept its build system in order, that should be trivial for them to do. This differs a bit from some open source libraries that are infamous for frequently changing their API, which would impose an actual burden on the vendor.

As far as I know, the gcc developers have never promised that you could do what Steam does and expect it to keep working long term. Steam ought either to bundle all the libraries it needs, or bundle nothing and have a policy for rebuilding when libraries update. Bundling some things and not others is an invitation for trouble.

I am also unaware of any proprietary vendors that have publicly requested any assistance in this area. Since the vendors never asked for help, and gcc never promised it, it seems to me that the fault lies squarely on the vendors who failed to prepare for this, either by asking gcc to handle it differently, by refraining from use of libstdc++, or by preparing to rebuild as needed. Note also that gcc-5 was released April 2015. Vendors have now had more than 2 years to do a fairly simple upgrade. If they can't even do that, they're probably not supporting the game at all, even for serious bugs or security issues.
Back to top
View user's profile Send private message
Satarsa
n00b
n00b


Joined: 21 Sep 2005
Posts: 70
Location: Russia, St.-Petersburg

PostPosted: Sat Dec 02, 2017 9:31 pm    Post subject: Re: steam+primus does not find symbol Reply with quote

Holysword wrote:
Whenever I try to start a Steam game via primusrun %command% I get the following error in the console:
Code:
/bin/bash: relocation error: /usr/lib64/primus/libGL.so.1: symbol _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev, version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference



In case someone is looking for a solution, this one works fine for me:

Code:

__GLVND_DISALLOW_PATCHING=1 optirun -b primus /usr/bin/steam
Back to top
View user's profile Send private message
Mgiese
Veteran
Veteran


Joined: 23 Mar 2005
Posts: 1607
Location: indiana

PostPosted: Sat Nov 16, 2019 4:08 pm    Post subject: Reply with quote

hi there,

first of all, what is optirun ?

i encounter this error when lauchnching civilization 6. which was working flawlessly last time i checked 2 months ago but now this :

Code:
./GameGuide/Civ6: relocation error: ./GameGuide/Civ6: symbol _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_createERmm version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference


i use gcc 9.2. i tried several LD_PRELOADS but none worked



thanks for suggestions
_________________
I do not have a Superman complex, for I am God not Superman :D

Ryzen9 7950x ; Geforce1650 ; kernel 6.5 ; XFCE
Back to top
View user's profile Send private message
Mgiese
Veteran
Veteran


Joined: 23 Mar 2005
Posts: 1607
Location: indiana

PostPosted: Sat Nov 16, 2019 4:49 pm    Post subject: Reply with quote

hi, got it to work with
Code:
LD_PRELOAD=/usr/lib64/gcc/x86_64-pc-linux-gnu/9.1.0/libstdc++.so.6 steam steam://rungameid/289070

_________________
I do not have a Superman complex, for I am God not Superman :D

Ryzen9 7950x ; Geforce1650 ; kernel 6.5 ; XFCE
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Multimedia All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum