mywave82 / opencubicplayer

Open Cubic Player (unix fork). Music visualizer for various tracked music formats (amiga modules, S3M, IT), chiptunes and other formats related to demoscene
https://stian.cubic.org/project-ocp.php
GNU General Public License v2.0
292 stars 19 forks source link

Is default `ocp` build static? #115

Closed abitrolly closed 4 months ago

abitrolly commented 4 months ago

I am using ocp from Homebrew, It depends on a lot of libraries for installation, like cjson, but ldd shows no dependencies.

$ ldd `which ocp`
    linux-vdso.so.1 (0x00007ffc673f0000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f27aa6a7000)
    /home/linuxbrew/.linuxbrew/lib/ld.so => /lib64/ld-linux-x86-64.so.2 (0x00007f27aa8b9000)

So is the ocp build static by default?

alexmyczko commented 4 months ago

easy to find out by removing the libs. i think the sodtware loads libraries by itself, it has so called modules as shared libs as plugins which are linked dynamically.

abitrolly commented 4 months ago

I don't think it is easy. Removed cjson and SDL from Homebrew and ocp still works. Maybe finds lib in the system, or maybe it should fail when it calls some function.

alexmyczko commented 4 months ago

so you're using brew with linux. what os/release? just to be able to reproduce, will also try to figure out (unless stian sheds some light to the question faster than me)

abitrolly commented 4 months ago

Fedora 40.

alexmyczko commented 4 months ago

I'm on debian, and there I have these files, where one would run ldd against:

/usr/lib/ocp/autoload/35-devpalsa.so
/usr/lib/ocp/autoload/35-devpnone.so
/usr/lib/ocp/autoload/35-devposs.so
/usr/lib/ocp/autoload/35-devpsdl2.so
/usr/lib/ocp/autoload/35-devwmix.so
/usr/lib/ocp/autoload/35-devwmixf.so
/usr/lib/ocp/autoload/35-devwnone.so
/usr/lib/ocp/autoload/95-playay.so
/usr/lib/ocp/autoload/95-playcda.so
/usr/lib/ocp/autoload/95-playflac.so
/usr/lib/ocp/autoload/95-playgmd.so
/usr/lib/ocp/autoload/95-playgme.so
/usr/lib/ocp/autoload/95-playhvl.so
/usr/lib/ocp/autoload/95-playit.so
/usr/lib/ocp/autoload/95-playmp2.so
/usr/lib/ocp/autoload/95-playogg.so
/usr/lib/ocp/autoload/95-playopl.so
/usr/lib/ocp/autoload/95-playsid.so
/usr/lib/ocp/autoload/95-playtimidity.so
/usr/lib/ocp/autoload/95-playwav.so
/usr/lib/ocp/autoload/95-playxm.so
/usr/lib/ocp/autoload/95-playym.so
/usr/lib/ocp/autoload/freverb.so
/usr/lib/ocp/autoload/ireverb.so
/usr/lib/ocp/libocp.so

Basically, rpm packages, are built from srpm, so check the source how it's built.

Usuallt things are linked dynamically, except for stuff like appimage,snap,flatpak

Or you have special purpose/embedded stuff, then some use static linking.

Ah wait so you use brew, let's check the package... that'd be here: https://github.com/Homebrew/homebrew-core/blob/faa03ef71de4f53f92f79dc46e5c9eb59d377bdd/Formula/o/ocp.rb

AFAIK there's no -static there or in upstream. So the answer is definitely no, by default it is not linked statically.

abitrolly commented 4 months ago

From running ldd on all .so files in ocp dir it appears that libs are indeed linked dynamically.

Thanks for the hint.

$ ldd `fd -p '\.so' ../linuxbrew/.linuxbrew/Cellar/ocp` | grep -v '^\.\.' | sort | sed -r 's/\(.+//' | uniq
    /lib64/ld-linux-x86-64.so.2 
    libancient.so.2 => /home/linuxbrew/.linuxbrew/opt/ancient/lib/libancient.so.2 
    libasound.so.2 => /home/linuxbrew/.linuxbrew/opt/alsa-lib/lib/libasound.so.2 
    libbz2.so.1.0 => /home/linuxbrew/.linuxbrew/opt/bzip2/lib/libbz2.so.1.0 
    libcjson.so.1 => /home/linuxbrew/.linuxbrew/opt/cjson/lib/libcjson.so.1 
    libc.so.6 => /lib64/libc.so.6 
    libdiscid.so.0 => /home/linuxbrew/.linuxbrew/opt/libdiscid/lib/libdiscid.so.0 
    libFLAC.so.12 => /home/linuxbrew/.linuxbrew/opt/flac/lib/libFLAC.so.12 
    libfreetype.so.6 => /home/linuxbrew/.linuxbrew/opt/freetype/lib/libfreetype.so.6 
    libgcc_s.so.1 => /home/linuxbrew/.linuxbrew/lib/libgcc_s.so.1 
    libgcc_s.so.1 => /home/linuxbrew/.linuxbrew/opt/gcc/lib/gcc/current/libgcc_s.so.1 
    libgme.so.0 => /home/linuxbrew/.linuxbrew/opt/game-music-emu/lib/libgme.so.0 
    libjpeg.so.8 => /home/linuxbrew/.linuxbrew/opt/jpeg-turbo/lib/libjpeg.so.8 
    libmad.so.0 => /home/linuxbrew/.linuxbrew/opt/mad/lib/libmad.so.0 
    libm.so.6 => /lib64/libm.so.6 
    libncursesw.so.6 => /home/linuxbrew/.linuxbrew/opt/ncurses/lib/libncursesw.so.6 
    libogg.so.0 => /home/linuxbrew/.linuxbrew/opt/libogg/lib/libogg.so.0 
    libpng16.so.16 => /home/linuxbrew/.linuxbrew/opt/libpng/lib/libpng16.so.16 
    libSDL2-2.0.so.0 => /home/linuxbrew/.linuxbrew/opt/sdl2/lib/libSDL2-2.0.so.0 
    libstdc++.so.6 => /home/linuxbrew/.linuxbrew/lib/libstdc++.so.6 
    libstdc++.so.6 => /home/linuxbrew/.linuxbrew/opt/gcc/lib/gcc/current/libstdc++.so.6 
    libvorbisfile.so.3 => /home/linuxbrew/.linuxbrew/opt/libvorbis/lib/libvorbisfile.so.3 
    libvorbis.so.0 => /home/linuxbrew/.linuxbrew/Cellar/libvorbis/1.3.7/lib/libvorbis.so.0 
    libX11.so.6 => /home/linuxbrew/.linuxbrew/opt/libx11/lib/libX11.so.6 
    libXau.so.6 => /home/linuxbrew/.linuxbrew/opt/libxau/lib/libXau.so.6 
    libxcb.so.1 => /home/linuxbrew/.linuxbrew/opt/libxcb/lib/libxcb.so.1 
    libXcursor.so.1 => /home/linuxbrew/.linuxbrew/opt/libxcursor/lib/libXcursor.so.1 
    libXdmcp.so.6 => /home/linuxbrew/.linuxbrew/opt/libxdmcp/lib/libXdmcp.so.6 
    libXext.so.6 => /home/linuxbrew/.linuxbrew/opt/libxext/lib/libXext.so.6 
    libXfixes.so.3 => /home/linuxbrew/.linuxbrew/opt/libxfixes/lib/libXfixes.so.3 
    libXi.so.6 => /home/linuxbrew/.linuxbrew/opt/libxi/lib/libXi.so.6 
    libXrandr.so.2 => /home/linuxbrew/.linuxbrew/opt/libxrandr/lib/libXrandr.so.2 
    libXrender.so.1 => /home/linuxbrew/.linuxbrew/opt/libxrender/lib/libXrender.so.1 
    libXss.so.1 => /home/linuxbrew/.linuxbrew/opt/libxscrnsaver/lib/libXss.so.1 
    libz.so.1 => /home/linuxbrew/.linuxbrew/opt/zlib/lib/libz.so.1 
    linux-vdso.so.1