openvr icon indicating copy to clipboard operation
openvr copied to clipboard

Why is libopenvr_api.so linked against SDL onl Linux?

Open sphaero opened this issue 3 years ago • 5 comments

amongst many other libs:

$ ldd openvr/bin/linux64/libopenvr_api.so
	linux-vdso.so.1 (0x00007ffebd9ea000)
	libSDL2-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0 (0x00007faaa928b000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007faaa9280000)
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007faaa9263000)
	libgomp.so.1 => /usr/lib/x86_64-linux-gnu/libgomp.so.1 (0x00007faaa921f000)
	libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007faaa9198000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007faaa9192000)
	/lib64/ld-linux-x86-64.so.2 (0x00007faaa9494000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007faaa916f000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007faaa8f63000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007faaa8e1e000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007faaa8c59000)
	libasound.so.2 => /usr/lib/x86_64-linux-gnu/libasound.so.2 (0x00007faaa8b52000)
	libpulse.so.0 => /usr/lib/x86_64-linux-gnu/libpulse.so.0 (0x00007faaa8afd000)
	libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007faaa89b8000)
	libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007faaa89a3000)
	libXcursor.so.1 => /usr/lib/x86_64-linux-gnu/libXcursor.so.1 (0x00007faaa8996000)
	libXinerama.so.1 => /usr/lib/x86_64-linux-gnu/libXinerama.so.1 (0x00007faaa8991000)
	libXi.so.6 => /usr/lib/x86_64-linux-gnu/libXi.so.6 (0x00007faaa897d000)
	libXrandr.so.2 => /usr/lib/x86_64-linux-gnu/libXrandr.so.2 (0x00007faaa8970000)
	libXss.so.1 => /usr/lib/x86_64-linux-gnu/libXss.so.1 (0x00007faaa8969000)
	libXxf86vm.so.1 => /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1 (0x00007faaa8763000)
	libdrm.so.2 => /usr/lib/x86_64-linux-gnu/libdrm.so.2 (0x00007faaa874e000)
	libgbm.so.1 => /usr/lib/x86_64-linux-gnu/libgbm.so.1 (0x00007faaa873e000)
	libwayland-egl.so.1 => /usr/lib/x86_64-linux-gnu/libwayland-egl.so.1 (0x00007faaa8739000)
	libwayland-client.so.0 => /usr/lib/x86_64-linux-gnu/libwayland-client.so.0 (0x00007faaa8728000)
	libwayland-cursor.so.0 => /usr/lib/x86_64-linux-gnu/libwayland-cursor.so.0 (0x00007faaa871d000)
	libxkbcommon.so.0 => /usr/lib/x86_64-linux-gnu/libxkbcommon.so.0 (0x00007faaa86d7000)
	libGLdispatch.so.0 => /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007faaa861f000)
	libGLX.so.0 => /usr/lib/x86_64-linux-gnu/libGLX.so.0 (0x00007faaa85eb000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007faaa85d1000)
	libpulsecommon-15.0.so => /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.0.so (0x00007faaa8546000)
	libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007faaa84f2000)
	libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007faaa84c7000)
	libXrender.so.1 => /usr/lib/x86_64-linux-gnu/libXrender.so.1 (0x00007faaa82bd000)
	libXfixes.so.3 => /usr/lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007faaa82b5000)
	libwayland-server.so.0 => /usr/lib/x86_64-linux-gnu/libwayland-server.so.0 (0x00007faaa829c000)
	libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007faaa826b000)
	libffi.so.8 => /usr/lib/x86_64-linux-gnu/libffi.so.8 (0x00007faaa825e000)
	libsndfile.so.1 => /usr/lib/x86_64-linux-gnu/libsndfile.so.1 (0x00007faaa81db000)
	libX11-xcb.so.1 => /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007faaa81d6000)
	libsystemd.so.0 => /usr/lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007faaa810f000)
	libasyncns.so.0 => /usr/lib/x86_64-linux-gnu/libasyncns.so.0 (0x00007faaa8107000)
	libwrap.so.0 => /usr/lib/x86_64-linux-gnu/libwrap.so.0 (0x00007faaa80fb000)
	libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007faaa80f6000)
	libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007faaa7ef0000)
	libFLAC.so.8 => /usr/lib/x86_64-linux-gnu/libFLAC.so.8 (0x00007faaa7eaf000)
	libvorbis.so.0 => /usr/lib/x86_64-linux-gnu/libvorbis.so.0 (0x00007faaa7e82000)
	libvorbisenc.so.2 => /usr/lib/x86_64-linux-gnu/libvorbisenc.so.2 (0x00007faaa7dd7000)
	libopus.so.0 => /usr/lib/x86_64-linux-gnu/libopus.so.0 (0x00007faaa7d7c000)
	libogg.so.0 => /usr/lib/x86_64-linux-gnu/libogg.so.0 (0x00007faaa7d6f000)
	liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007faaa7d47000)
	libzstd.so.1 => /usr/lib/x86_64-linux-gnu/libzstd.so.1 (0x00007faaa7c6a000)
	liblz4.so.1 => /usr/lib/x86_64-linux-gnu/liblz4.so.1 (0x00007faaa7c47000)
	libcap.so.2 => /lib/x86_64-linux-gnu/libcap.so.2 (0x00007faaa7c3c000)
	libgcrypt.so.20 => /usr/lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007faaa7b00000)
	libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007faaa7ae6000)
	libnsl.so.2 => /usr/lib/x86_64-linux-gnu/libnsl.so.2 (0x00007faaa7acb000)
	libbsd.so.0 => /usr/lib/x86_64-linux-gnu/libbsd.so.0 (0x00007faaa7ab2000)
	libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007faaa7a8b000)
	libtirpc.so.3 => /lib/x86_64-linux-gnu/libtirpc.so.3 (0x00007faaa7a5c000)
	libmd.so.0 => /usr/lib/x86_64-linux-gnu/libmd.so.0 (0x00007faaa7a4f000)
	libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007faaa79fc000)
	libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007faaa7920000)
	libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007faaa78f0000)
	libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007faaa78ea000)
	libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007faaa78db000)
	libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007faaa78d4000)

sphaero avatar Nov 05 '21 09:11 sphaero

That is indeed weird, considering how a freshly built one only links like 5 libs

$ ldd ./libopenvr_api.so 
	linux-vdso.so.1 (0x00007ffe6b30a000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa6b6da3000)
	libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa6b6bc1000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa6b6a72000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa6b6a57000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa6b6865000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fa6b6e5b000)

Then further comparing the sizes of lib/linux64/libopenvr_api.so from master in this repo and a freshly built one, the one from this repo appears to be way larger

$ ls -l
total 4028
-rw-rw-r-- 1 okawo okawo 3335136 Nov  5 13:33 libopenvr_api_master.so
-rwxrwxr-x 1 okawo okawo  784472 Nov  4 20:41 libopenvr_api_fresh.so

Which brings me to the thought that either a) the CMakeLists file is more fucked then i though or b) we're missing sources... again :/

A very interesting find none the less

okawo80085 avatar Nov 05 '21 11:11 okawo80085

VRDashboardManager doesn't seem to be present anymore in libopenvr_api but I still see 00000000000056a0 T VRControlPanel, see #425 and #156

In particular this means you can't replace SteamVR/bin/linux64/libopenvr_api.so with a version built from the public sources without SteamVR breaking.

ChristophHaag avatar Nov 05 '21 11:11 ChristophHaag

Can you push a fresh one?

sphaero avatar Nov 05 '21 12:11 sphaero

@ChristophHaag huh, didn't know that, that also explains the currently broken builds

okawo80085 avatar Nov 05 '21 23:11 okawo80085

@sphaero my bet for that would be no, considering how there were no updates for 9 months now...

okawo80085 avatar Nov 10 '21 12:11 okawo80085

Seems this is already fixed with latest releases:

ldd libopenvr_api.so 
	linux-vdso.so.1 (0x00007ffe68fe6000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f206fdd1000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f206fefa000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f206fdcc000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f206fced000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f206fb0c000)

sphaero avatar Feb 15 '23 11:02 sphaero