steam-overlay icon indicating copy to clipboard operation
steam-overlay copied to clipboard

mesa does not work with STEAM_RUNTIME=1

Open darkbasic opened this issue 11 years ago • 11 comments

libGL error: dlopen /usr/lib32/dri/radeonsi_dri.so failed (/home/niko/.local/share/Steam/ubuntu12_32/steam-runtime/i386/lib/i386-linux-gnu/libgcc_s.so.1: version GCC_4.7.0' not found (required by /usr/lib32/dri/radeonsi_dri.so)) 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/lib32/dri/swrast_dri.so failed (/home/niko/.local/share/Steam/ubuntu12_32/steam-runtime/i386/lib/i386-linux-gnu/libgcc_s.so.1: versionGCC_4.7.0' not found (required by /usr/lib32/dri/swrast_dri.so)) libGL error: unable to load driver: swrast_dri.so libGL error: failed to load driver: swrast ExecCommandLine: "/home/niko/.local/share/Steam/ubuntu12_32/steam" System startup time: 15,89 seconds libGL error: dlopen /usr/lib32/dri/radeonsi_dri.so failed (/home/niko/.local/share/Steam/ubuntu12_32/steam-runtime/i386/lib/i386-linux-gnu/libgcc_s.so.1: version GCC_4.7.0' not found (required by /usr/lib32/dri/radeonsi_dri.so)) 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/lib32/dri/swrast_dri.so failed (/home/niko/.local/share/Steam/ubuntu12_32/steam-runtime/i386/lib/i386-linux-gnu/libgcc_s.so.1: versionGCC_4.7.0' not found (required by /usr/lib32/dri/swrast_dri.so)) libGL error: unable to load driver: swrast_dri.so libGL error: failed to load driver: swrast

darkbasic avatar May 07 '14 09:05 darkbasic

Looks like he's prefering the libgcc_s.so.1 from the steam runtime instead of using the system library which /usr/lib32/dri/radeonsi_dri.so is linked against. What does a ldd /usr/lib32/dri/radeonsi_dri.so give you? Maybe preloading the right libgcc_s.so with LD_PRELOAD helps?

anyc avatar May 10 '14 19:05 anyc

It happens when mesa is compiled with gcc 4.9. It crashes my X.

Nowaker avatar May 13 '14 22:05 Nowaker

LD_PRELOAD=/usr/lib32/libgcc_s.so.1 steam works for me.

Nowaker avatar May 13 '14 22:05 Nowaker

@Nowaker To be fair it happens with every gcc version other than 4.7.0 (see also this part of the error: "version `GCC_4.7.0' not found"). This is most likely cause Ubuntu and SteamOS are compiled with that version. Anyway, your LD_PRELOAD trick seems to work even if the path seems to be wrong. I had to use: LD_PRELOAD=/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.2/32/libgcc_s.so.1 STEAM_RUNTIME=1 steam

[EDIT] The LD_PRELOAD trick does not work! Yes, the error message goes away but I can't start any game and am seeing this a lot: ERROR: ld.so: object '/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.2/32/libgcc_s.so.1' from LD_PRELOAD cannot be preloaded: ignored. [/EDIT]

@anyc I know this is from r600g and not radeonsi but beside that the problem is exactly the same, so I hope this helps:

$ ldd /usr/lib32/dri/r600_dri.so
    linux-gate.so.1 (0xf7766000)
    libelf.so.1 => /usr/lib32/libelf.so.1 (0xf6eb4000)
    libexpat.so.1 => /usr/lib32/libexpat.so.1 (0xf6e8a000)
    libpthread.so.0 => /lib32/libpthread.so.0 (0xf6e6e000)
    libdl.so.2 => /lib32/libdl.so.2 (0xf6e69000)
    libLLVM-3.4.so => /usr/lib32/libLLVM-3.4.so (0xf5ba5000)
    libdrm.so.2 => /usr/lib32/libdrm.so.2 (0xf5b98000)
    libdrm_radeon.so.1 => /usr/lib32/libdrm_radeon.so.1 (0xf5b8a000)
    libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.2/32/libstdc++.so.6 (0xf5a98000)
    libm.so.6 => /lib32/libm.so.6 (0xf5a54000)
    libc.so.6 => /lib32/libc.so.6 (0xf58a3000)
    libgcc_s.so.1 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.2/32/libgcc_s.so.1 (0xf5889000)
    /lib/ld-linux.so.2 (0xf7767000)
    libz.so.1 => /lib32/libz.so.1 (0xf5871000)
    libffi.so.6 => /usr/lib32/libffi.so.6 (0xf5869000)
    libncurses.so.5 => /usr/lib32/libncurses.so.5 (0xf5818000)

V10lator avatar May 14 '14 07:05 V10lator

Hey,

I was hoping to play don't starve with open source drivers but could not and found out this thread. I have the same issue than you V10lator :

Game update: AppID 219740 "Don't Starve", ProcID 1681, IP 0.0.0.0:0
ERROR: ld.so: object '/usr/lib32/libgcc_s.so.1' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/pluc/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/pluc/.local/share/Steam/ubuntu12_64/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS64): ignored.
libGL error: dlopen /usr/lib32/xorg/modules/dri/radeonsi_dri.so failed (/home/pluc/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /usr/lib32/libLLVM-3.4.so))
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/lib32/xorg/modules/dri/swrast_dri.so failed (/home/pluc/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /usr/lib32/libLLVM-3.4.so))
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast

ldd /home/pluc/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so                                                                                                                                                   linux-gate.so.1 (0xf77ac000)
libGL.so.1 => /usr/lib32/libGL.so.1 (0xf76d9000)
librt.so.1 => /usr/lib32/librt.so.1 (0xf76d0000)
libdl.so.2 => /usr/lib32/libdl.so.2 (0xf76cb000)
libstdc++.so.6 => /usr/lib32/libstdc++.so.6 (0xf75d7000)
libpthread.so.0 => /usr/lib32/libpthread.so.0 (0xf75b9000)
/usr/lib/ld-linux.so.2 (0xf77ad000)
libc.so.6 => /usr/lib32/libc.so.6 (0xf73f7000)
libglapi.so.0 => /usr/lib32/libglapi.so.0 (0xf73df000)
libXext.so.6 => /usr/lib32/libXext.so.6 (0xf73cc000)
libXdamage.so.1 => /usr/lib32/libXdamage.so.1 (0xf73c8000)
libXfixes.so.3 => /usr/lib32/libXfixes.so.3 (0xf73c1000)
libX11-xcb.so.1 => /usr/lib32/libX11-xcb.so.1 (0xf73be000)
libX11.so.6 => /usr/lib32/libX11.so.6 (0xf7287000)
libxcb-glx.so.0 => /usr/lib32/libxcb-glx.so.0 (0xf726e000)
libxcb-dri2.so.0 => /usr/lib32/libxcb-dri2.so.0 (0xf7268000)
libxcb-dri3.so.0 => /usr/lib32/libxcb-dri3.so.0 (0xf7263000)
libxcb-present.so.0 => /usr/lib32/libxcb-present.so.0 (0xf725f000)
libxcb-sync.so.1 => /usr/lib32/libxcb-sync.so.1 (0xf7258000)
libxcb.so.1 => /usr/lib32/libxcb.so.1 (0xf7234000)
libxshmfence.so.1 => /usr/lib32/libxshmfence.so.1 (0xf7231000)
libXxf86vm.so.1 => /usr/lib32/libXxf86vm.so.1 (0xf722a000)
libdrm.so.2 => /usr/lib32/libdrm.so.2 (0xf721c000)
libm.so.6 => /usr/lib32/libm.so.6 (0xf71d0000)
libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf71b5000)
libXau.so.6 => /usr/lib32/libXau.so.6 (0xf71b1000)
libXdmcp.so.6 => /usr/lib32/libXdmcp.so.6 (0xf71a9000)

I'm on archlinux

kode9 avatar May 16 '14 18:05 kode9

This is a known issue with the steam runtime and is being tracked at ValveSoftware/steam-runtime#13 / ValveSoftware/steam-runtime#14. Newer mesa is using symbols that do not exist in the steam-runtime version of gcc.

Tele42 avatar May 19 '14 00:05 Tele42

We could adapt

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

(from https://github.com/ValveSoftware/steam-runtime/issues/13#issuecomment-219231803) to something suitable in /usr/bin/steam for this scenario. It'd not be ideal, but it would not be worse than what most Arch users experience.

I'm thinking a patch on /usr/bin/steam adding

#If using mesa and the steam runtime together, expect trouble, so try a workaround
if [ "$(glxinfo | grep Mesa)" ] && ["$STEAM_RUNTIME" == '1']; then
    LD_FIXUP="LD_PRELOAD='/usr/\$LIB/libstdc++.so.6 /usr/\$LIB/libgcc_s.so.1 /usr/\$LIB/libxcb.so.1 /usr/\$LIB/libgpg-error.so'"
else
    LD_FIXUP=""
fi

then in the last section

if [ "`command -v tee`" != "" ]; then
    mkdir -p --mode=777 /tmp/dumps
    exec $LD_FIXUP "$LAUNCHSTEAMDIR/$STEAMBOOTSTRAP" "$@" 2>&1 | tee "/tmp/dumps/${USER}_stdout.txt"
else
    exec $LD_FIXUP "$LAUNCHSTEAMDIR/$STEAMBOOTSTRAP" "$@"
fi

NOTE: this is probably the wrong syntax, I'm just pondering.

Tele42 avatar Aug 31 '16 19:08 Tele42

Agree, it's incredibly annoying having to LD_PRELOAD tons of libs every time (Arch).

darkbasic avatar Aug 31 '16 21:08 darkbasic

Actually, when you put symbolic links to the path the correspond to multilib on Debian like

ln -s /usr/lib32 /usr/lib/i386-linux-gnu
ln -s /usr/lib /usr/lib/x86_64-linux-gnu

then the steam runtime will detect the newer libraries on the system and remove the older versions from the run-time.

gerddie avatar Oct 21 '17 07:10 gerddie

Fwiw, since STEAM_RUNTIME_PREFER_HOST_LIBRARIES=1 was added as the default, steam plus mesa does run with STEAM_RUNTIME=1, but we either need to LD_PRELOAD libstdc++.so.6 and have LIBGL_DRI3_DISABLE=1 set on first run, or delete libstdc++ and libxcb from the bootstrapper runtime, then it doesn't need other workarounds as long as steam doesn't do a reset.

Tele42 avatar Oct 30 '17 15:10 Tele42

@Tele42 is this different than the idea from #193 ?

EoD avatar Nov 03 '17 17:11 EoD