wtfbbqhax / tremulous

:godmode: Modern modular idTech3 based engine, Tremulous

Home Page:http://wtfbbqhax.github.io/tremulous/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Linux build fails to load "renderergl[12].so" due to mangled symbol's

cengique opened this issue · comments

Downloaded the Linux x64 release binary zip.
Running it on:

$ uname -a
Linux 3.17.2-gentoo #1 SMP PREEMPT Fri Jan 9 14:28:38 EST 2015 x86_64 Intel(R) Core(TM) i5-2500K CPU @ 3.30GHz GenuineIntel GNU/Linux

Got error:

----- Initializing Renderer ----
Trying to load "renderer_opengl2_x86_64.so" from "."...
Loading "renderer_opengl2_x86_64.so" failed
failed:
"Failed loading ./renderer_opengl2_x86_64.so: ./renderer_opengl2_x86_64.so: undefined symbol: _ZGVbN2vv___pow_finite"
Trying to load "renderer_opengl1_x86_64.so" from "."...
Loading "renderer_opengl1_x86_64.so" failed
failed:
"Failed loading ./renderer_opengl1_x86_64.so: ./renderer_opengl1_x86_64.so: undefined symbol: _ZGVbN2vv___pow_finite"
Failed to load renderer

Here's the output of ldd:

$ ldd ./tremulous.x86_64 
        linux-vdso.so.1 (0x00007fff5b7fe000)
        libSDL2-2.0.so.0 => /usr/lib64/libSDL2-2.0.so.0 (0x00007f64bd3b6000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f64bd1ae000)
        libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/5.3.0/libstdc++.so.6 (0x00007f64bce2a000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f64bcb33000)
        libmvec.so.1 => /lib64/libmvec.so.1 (0x00007f64bc90f000)
        libgcc_s.so.1 => /usr/lib/gcc/x86_64-pc-linux-gnu/5.3.0/libgcc_s.so.1 (0x00007f64bc6f8000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f64bc35c000)
        libasound.so.2 => /usr/lib64/libasound.so.2 (0x00007f64bc083000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f64bbe7f000)
        libpulse.so.0 => /usr/lib64/libpulse.so.0 (0x00007f64bbc2d000)
        libX11.so.6 => /usr/lib64/libX11.so.6 (0x00007f64bb8f3000)
        libXext.so.6 => /usr/lib64/libXext.so.6 (0x00007f64bb6e1000)
        libXcursor.so.1 => /usr/lib64/libXcursor.so.1 (0x00007f64bb4d6000)
        libXi.so.6 => /usr/lib64/libXi.so.6 (0x00007f64bb2c6000)
        libXrandr.so.2 => /usr/lib64/libXrandr.so.2 (0x00007f64bb0bb000)
        libXxf86vm.so.1 => /usr/lib64/libXxf86vm.so.1 (0x00007f64baeb5000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f64bac99000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f64bd6b2000)
        libpulsecommon-8.0.so => /usr/lib64/pulseaudio/libpulsecommon-8.0.so (0x00007f64baa17000)
        libjson-c.so.2 => /usr/lib64/libjson-c.so.2 (0x00007f64ba80c000)
        libdbus-1.so.3 => /usr/lib64/libdbus-1.so.3 (0x00007f64ba5c5000)
        libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x00007f64ba3a5000)
        libXrender.so.1 => /usr/lib64/libXrender.so.1 (0x00007f64ba19b000)
        libXfixes.so.3 => /usr/lib64/libXfixes.so.3 (0x00007f64b9f95000)
        libX11-xcb.so.1 => /usr/lib64/libX11-xcb.so.1 (0x00007f64b9d93000)
        libICE.so.6 => /usr/lib64/libICE.so.6 (0x00007f64b9b76000)
        libSM.so.6 => /usr/lib64/libSM.so.6 (0x00007f64b996d000)
        libXtst.so.6 => /usr/lib64/libXtst.so.6 (0x00007f64b9767000)
        libsystemd.so.0 => /usr/lib64/libsystemd.so.0 (0x00007f64b94d6000)
        libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f64b92cb000)
        libsndfile.so.1 => /usr/lib64/libsndfile.so.1 (0x00007f64b9054000)
        libasyncns.so.0 => /usr/lib64/libasyncns.so.0 (0x00007f64b8e4f000)
        libXau.so.6 => /usr/lib64/libXau.so.6 (0x00007f64b8c4b000)
        libXdmcp.so.6 => /usr/lib64/libXdmcp.so.6 (0x00007f64b8a45000)
        libbsd.so.0 => /usr/lib64/libbsd.so.0 (0x00007f64b882f000)
        libuuid.so.1 => /lib64/libuuid.so.1 (0x00007f64b862a000)
        libcap.so.2 => /lib64/libcap.so.2 (0x00007f64b8424000)
        liblz4.so.1 => /usr/lib64/liblz4.so.1 (0x00007f64b8211000)
        libgcrypt.so.20 => /usr/lib64/libgcrypt.so.20 (0x00007f64b7f2f000)
        libFLAC.so.8 => /usr/lib64/libFLAC.so.8 (0x00007f64b7cf3000)
        libogg.so.0 => /usr/lib64/libogg.so.0 (0x00007f64b7aec000)
        libvorbis.so.0 => /usr/lib64/libvorbis.so.0 (0x00007f64b78c0000)
        libvorbisenc.so.2 => /usr/lib64/libvorbisenc.so.2 (0x00007f64b760d000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f64b73f6000)
        libgpg-error.so.0 => /usr/lib64/libgpg-error.so.0 (0x00007f64b71e2000)

Looks like the math library pow function is being C++ name mangled in the automated builds.

The fix is probably going to be linking the binary with -static (same was previously done for mingw32)

I think building with USE_RENDERER_DLOPEN=0 would fix this on linux; will update Makefile later.

This commit is staged in my local "auto update" branch.