aardappel / lobster

The Lobster Programming Language
http://strlen.com/lobster
2.24k stars 121 forks source link

release binaries does not run on some recent ubuntu version #252

Closed franko closed 1 year ago

franko commented 1 year ago

I wanted to report that the release binaries in the release v2023.6 doesn't work on a 20.04 ubuntu system due to recent GLIBC and STDC++ symbol version requirements:

./bin/lobster: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by ./bin/lobster)
./bin/lobster: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by ./bin/lobster)
./bin/lobster: /lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.13' not found (required by ./bin/lobster)
./bin/lobster: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by ./bin/lobster)
./bin/lobster: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by ./bin/lobster)
./bin/lobster: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./bin/lobster)

I advice to build the release file in an older debian-based system like ubuntu 18.04 and link libstdc++ and libgcc statically. In this way the provided binaries should work on a largest variety of linux systems requiring a GLIBC version which is not too recent.

aardappel commented 1 year ago

They are built using 22.04. This aspect of Linux is fundamentally broken. Big fan of static linking but that too on Linux doesn't work in all circumstances.

We use the latest github runners (which we need otherwise the compilers are too old).

If you're on Linux and you're not up to date on your OS you have to build yourself it seems?

franko commented 1 year ago

I was able to compile by myself, only had to do a very minor modification because from_chars to parse floating point numbers was not supported by the GCC version I used.

Otherwise I don't think Linux is fundamentally wrong. You are compiling toward a very recent version of glibc and libstdc++ and they are enforcing the version at run time. I gave a suggestion about how to do for the binaries.