-
Notifications
You must be signed in to change notification settings - Fork 85
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Problem with libstdc++.so.6 bundled with steam-runtime 2014-04-15 #13
Comments
By the way, the system's lib is 4.8.2-19ubuntu1 (libstdc++.so.6.0.19), using Ubuntu 14.04 as indicated in the log. |
Sorry, my bad... the bundled library only provides the following versions, among which is not 3.4.18: GLIBCXX_3.4 So it seems the bundled lib must be updated. |
Now it's the same with libgcc_s.so.1 as stated in bug #3280 Running Steam on ubuntu 14.04 64-bit For more information visit https://support.steampowered.com/kb_article.php?ref=9938-EYZB-7457. |
deleting libgcc_s.so.1 of steam-runtime helped in my case #3291 |
I couldn't get the console output because this issue was causing the xserver to crash for me. Almost forgot: on ArchLinux, (multilib-)testing and mesa-git enabled. |
Thanks for the bug report; we are aware of it and are working out the best On Mon, May 26, 2014 at 2:08 PM, Benjamin Blanco
|
It's a bit of a mess, the library preloader must be able to figure the right libgcc and libstd++ from the same major version but with different dependencies! |
Putting these libraries in their own directory in the Steam runtime and using them only if needed (a simple test binary, linked against libGL, is probably enough to determine this), along with requiring that these are only distributed via Steam runtime (which will require a lot of game updates!), perhaps? These are system libraries; it's just plain wrong for games to be distributing them. |
On Thu, Jun 19, 2014 at 09:44:25AM -0700, NotMrFlibble wrote:
Wrong. They are a lot of gnu/linux systems out there which decide It should depend on a minimum set of system libs, the elf loader, Is that what you want? Sylvain |
Here are the things we are looking at right now...
Thanks, |
I found that Witcher 2 with Mesa 10.2 built against llvm 3.4.1 and using radeonsi would fail with a register-related error; but building Mesa against an llvm 3.5 snapshot (Debian unstable) ends up with it requiring libc6 2.19 etc. However, so that the game runs fine, that's what I've done. llibgl1-mesa-dri Depends: libc6 (>= 2.17), … , libgcc1 (>= 1:4.7), libllvm3.5, libstdc++6 (>= 4.6) So if the Steam runtime decides that a libstdc++ older than 4.8 can be used, it's going to break things here. My understanding is that it's always safe to use newer libc6, libstdc++6 and libgcc1 (for libc.so.6, libstdc++.so.6 and libgcc_s.so.1, respectively) – and if not, it's a library bug. |
On Sat, Jun 21, 2014 at 11:44:46AM -0700, Scott Ludwig wrote:
The runtime should rely only on the ELF loader. Everything else Oh! I forgot... plz! 64 bits native builds! ;). Namely steam best regards, Sylvain |
I stand corrected by myself: |
As you can see by the issues raised above, bundling core libraries like libstdc++ causes hella conflicts with environmentally-supplied libraries like video drivers, as seen on Arch Linux: https://wiki.archlinux.org/index.php/Steam#Steam_Runtime_issues |
Well, nothing new: c++ is a hell of a pain. c++ is a good tutorial The real issue is the dynamic linking of proper libstdc++, namely c++ The real answer: since steam does work with the system libs only with (We could also discuss of the stability of the libgcc C API...) |
Original author of this bug, please try your scenario again, I believe it's fixed. If it isn't fixed, please reopen this bug. The steam runtime in the current public steam client has been updated with gcc 4.8's libgcc and libstdc++. Also note a new steam runtime SDK release has been made with support for gcc 4.8 and clang 3.4. |
I temporarily restored the Steam-supplied libstdc++.so.6 and libgcc_s.so.1, restarted Steam, and promptly got the “not using direct rendering” dbox. You're supplying libraries from GCC 4.8, and I'm currently using OpenGL libs packaged for Debian jessie (mainly because that way I get decent open radeonsi support), and these require libstdc++ & libgcc_s from GCC 4.9 (which is the default version for Debian jessie). At present, even if you move to GCC 4.9, I expect the same situation to happen soon after GCC 5 is out… |
@NotMrFlibble is right: this is a short term fix. Back to c++ mess. We are dealing with the c++ ABIs and linking hell. The only long term way is to have the steam runtime dynamically load its libstdc++ with a dynamic link trick (maybe symbol versionning), or statically link libstdc++. BTW, you should do the same with libgcc... |
This problem occurs on Ubuntu 14.10 now too. (For anyone like me who was searching for a quick fix):
Renaming those libraries will force the use of system-wide ones. Which might possibly cause ABI issues, but will at least allow things to start normally and use DRI. |
On Wed, Nov 04, 2015 at 03:01:34AM -0800, Mark K Cowan wrote:
'broken by design' is way worse than a bug. |
@sylware: That goes for the steam client too. |
On Wed, Nov 04, 2015 at 03:52:28AM -0800, Mark K Cowan wrote:
Well, as I said, the real culprits are the "open source" guys who have the |
Jet fuel can't melt steel beams! |
@sylware There's nothing wrong with the 'open source guys' because this issue has been discussed plenty of times about how easy it is to solve this if Valve would do it. Valve needs to stop trying to override system libraries, especially libstdc++ and libgcc, because this breaks Mesa and DRI unless they are built statically. VMWare solved this exact problem just by putting each library into its own directory and only adding the necessary directories to $LD_LIBRARY_PATH. The other option is telling everyone to go back and recompile their games with those two libraries being compiled statically into the game itself. I don't even see why Valve is shipping these two libraries in their runtime anyway because that in itself is a terrible idea unless you are are wanting to issue security updates to your C++ runtimes regularly, which Valve doesn't seem to be doing at all with their frozen runtimes, which defeats the purpose entirely. |
I was talking about the "open source" guys from gcc, not all of them. I'm one Common sense and sanity dictate binary software needs minimal simple stable The minimal simple ABI for games should be something like that:
Everything else should be static. Even SDL2, and I would even consider the ELF |
Can we please at least have the steam.desktop application patched so that it says
Instead of
Even better is to just have a very simple, very convenient few lines of code in the Steam launch script to execute this one little |
On Sat, Apr 02, 2016 at 10:53:47AM -0700, Michael Murphy wrote:
It's deeper than that. You will have troubles with X libs pulling c++ stuff The real issue is c++ and libgcc in themself: the c++ ABI is just compiler Steam SDK should contain static libstdc++ and static libgcc in order to Don't forget that interop moto is to keep interfaces hardcore simple, thus Sylvain |
Recent changes to the Steam runtime now requires a new LD_PRELOAD hack, due to an issue with libgpg-error.
|
@DoctorJellyface The fix would actually be much easier than this. Just apply a few lines of shell to the steam.sh script and you're good to go. The fix could be as simple as the following (and this does actually work): if [ "$(glxinfo | grep Mesa)" ]; then
LD_PRELOAD='/usr/$LIB/libstdc++.so.6 /usr/$LIB/libgcc_s.so.1 /usr/$LIB/libxcb.so.1 /usr/$LIB/libgpg-error.so' exec "$LAUNCHSTEAMDIR/$STEAMBOOTSTRAP" "$@"
else
exec "$LAUNCHSTEAMDIR/$STEAMBOOTSTRAP" "$@"
fi |
@mmstick You just provided Valve with the easiest fix. So thanks. Let's hope they listen. |
@tfhavingfun Could you please elaborate where you put the code into steam.sh? The way I have tried it still resulted in the same error. But then again I am quite new to this and probably messed something up. |
@evhfiftyone50 What I did was create a tiny shell script and start steam with it: #!/bin/bash
env LD_PRELOAD='/usr/$LIB/libstdc++.so.6 /usr/$LIB/libgcc_s.so.1 /usr/$LIB/libxcb.so.1 /usr/$LIB/libgpg-error.so' /usr/bin/steam %U |
@evhfiftyone50 I don't recommend editing steam.sh directly. Instead just create a shell script as suggested by @pavlos256 and use a custom desktop file for Steam within which you can then refer to the shell script. That way you can just click the Steam icon (be it on your Desktop or Dash/Dock) to start it as you would normally do. Here is a video I made demonstrating how to do that: https://www.youtube.com/watch?v=gdM1S39mjgY |
I made a desktop file I made by copying the original desktop file and modifying
I also made it executable and refreshed my GNOME desktop so I could find it and click on it.
|
In ArchLinux the solution for me was: |
Arch Linux now has a
Just install that and launch Boom! You are done, no more deletions. |
Just updated my custom gnu/linux distro. 32 bits libs are a massive pain to build/setup, since you must use a multi-lib gcc. I do really think, it's time to provide a clean 64 bits client on gnu/linux. I can try to help (I'm humble), even though I'm an open source fan and c++ |
|
@Swyter How to install this kind of package? |
@LotosikRa In which Linux Distro ? |
@mikefaille Ubuntu 16.10 |
@LotosikRa You don't need this on Ubuntu. You already have "steam native" libs where native platform = Ubuntu/Debian. Just install steam from "Ubuntu Software". |
@mikefaille Did You mean that Ubuntu's
mean? |
@LotosikRa |
You'll still have the same problem with the steam runtime because Ubuntu is not actually an officially supported platform, even though it is claimed to be officially supported. You will need to apply the same fixes as other distributions to get working drivers in Steam games for Ubuntu 16.10. The same solution for Arch Linux applies to Ubuntu -- deleting the conflicting libs. I'm not aware of any PPAs providing a native runtime for Ubuntu. |
After a graphics drivers and llvm update (mesa git 2014.04.26, compiled with llvm 3.5; llvm 3.5 svn 207303) I have experienced the following problem:
libGL error: dlopen /usr/lib/i386-linux-gnu/dri/radeonsi_dri.so failed (/home/jose/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libstdc++.so.6: version
GLIBCXX_3.4.18' not found (required by /usr/lib/i386-linux-gnu/libLLVM-3.5.0.so.1)) libGL error: dlopen ${ORIGIN}/dri/radeonsi_dri.so failed (${ORIGIN}/dri/radeonsi_dri.so: no se puede abrir el archivo del objeto compartido: No existe el archivo o el directorio) libGL error: dlopen /usr/lib/dri/radeonsi_dri.so failed (/usr/lib/dri/radeonsi_dri.so: no se puede abrir el archivo del objeto compartido: No existe el archivo o el directorio) libGL error: unable to load driver: radeonsi_dri.so libGL error: driver pointer missing libGL error: failed to load driver: radeonsi libGL error: dlopen /usr/lib/i386-linux-gnu/dri/swrast_dri.so failed (/home/jose/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libstdc++.so.6: version
GLIBCXX_3.4.18' not found (required by /usr/lib/i386-linux-gnu/libLLVM-3.5.0.so.1))libGL error: dlopen ${ORIGIN}/dri/swrast_dri.so failed (${ORIGIN}/dri/swrast_dri.so: no se puede abrir el archivo del objeto compartido: No existe el archivo o el directorio)
libGL error: dlopen /usr/lib/dri/swrast_dri.so failed (/usr/lib/dri/swrast_dri.so: no se puede abrir el archivo del objeto compartido: No existe el archivo o el directorio)
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast
ExecCommandLine: "/home/jose/.local/share/Steam/ubuntu12_32/steam"
System startup time: 8,15 seconds
libGL error: dlopen /usr/lib/i386-linux-gnu/dri/radeonsi_dri.so failed (/home/jose/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libstdc++.so.6: version
GLIBCXX_3.4.18' not found (required by /usr/lib/i386-linux-gnu/libLLVM-3.5.0.so.1)) libGL error: dlopen ${ORIGIN}/dri/radeonsi_dri.so failed (${ORIGIN}/dri/radeonsi_dri.so: no se puede abrir el archivo del objeto compartido: No existe el archivo o el directorio) libGL error: dlopen /usr/lib/dri/radeonsi_dri.so failed (/usr/lib/dri/radeonsi_dri.so: no se puede abrir el archivo del objeto compartido: No existe el archivo o el directorio) libGL error: unable to load driver: radeonsi_dri.so libGL error: driver pointer missing libGL error: failed to load driver: radeonsi libGL error: dlopen /usr/lib/i386-linux-gnu/dri/swrast_dri.so failed (/home/jose/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libstdc++.so.6: version
GLIBCXX_3.4.18' not found (required by /usr/lib/i386-linux-gnu/libLLVM-3.5.0.so.1))libGL error: dlopen ${ORIGIN}/dri/swrast_dri.so failed (${ORIGIN}/dri/swrast_dri.so: no se puede abrir el archivo del objeto compartido: No existe el archivo o el directorio)
libGL error: dlopen /usr/lib/dri/swrast_dri.so failed (/usr/lib/dri/swrast_dri.so: no se puede abrir el archivo del objeto compartido: No existe el archivo o el directorio)
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast
Running Steam on ubuntu 14.04 64-bit
However the command strings /home/jose/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libstdc++.so.6 | grep GLIB did show version 3.4.18.
Removing the libstdc++.so.6 libstdc++.so.6.0.16 files solved the issue and now steam starts with direct GPU acceleration.
The text was updated successfully, but these errors were encountered: