Skip to content

Stop the Linux library needing glibc 2.38 - #47

Merged
SimonCropp merged 2 commits into
mainfrom
glibc-floor
Oct 10, 2026
Merged

SimonCropp merged 2 commits into
mainfrom
glibc-floor

Conversation

@SimonCropp

Copy link
Copy Markdown
Owner

The committed Linux libraries were built on the runner's own Ubuntu 24.04. A library records the glibc symbol versions of the headers it was compiled against, and these needed GLIBC_2.38 (for __isoc23_sscanf, fmod and fmodf) and GLIBCXX_3.4.29. The loader refuses that on Ubuntu 22.04, Debian 12 and RHEL 8 and 9, so the Linux head could not open a window there and BuildMonitor exited.

What changes

  • native/build-linux.sh builds the library in a manylinux_2_28 container, the way DiffEngine builds its viewer's.
  • build-native runs it there and then checks the result rather than trusting it: nothing above GLIBC_2.28, and nothing recorded as needed outside a short list.
  • The library is linked with --as-needed. That container's linker records every library it is handed, and raylib hands on libSM and libICE, which a stock Ubuntu lacks.
  • The rebuilt binaries, from Rebuild native UI binaries #46. The macOS dylib came out unchanged.

Checked

before after
linux-x64 GLIBC_2.38, GLIBCXX_3.4.29 GLIBC_2.27, GLIBCXX_3.4.21
linux-arm64 GLIBC_2.38, GLIBCXX_3.4.29 GLIBC_2.27, GLIBCXX_3.4.21

Read from the committed files' own version requirements, and the same numbers build-native printed for both architectures.

On glibc 2.28, in the manylinux image itself, the old linux-x64 library is refused with version `GLIBC_2.38' not found and the new one loads and answers bm_version() with 20. linux-arm64 was checked by its symbol versions only, not loaded on an old glibc.

Linked without --as-needed, the same build records libSM, libICE and libXext among others.

SimonCropp and others added 2 commits October 10, 2026 22:39
build-native built libbuildmonitor_ui.so on the runner's own Ubuntu 24.04. A
library records the glibc symbol versions of the headers it was compiled
against, and the committed ones need GLIBC_2.38, for __isoc23_sscanf, fmod and
fmodf, and GLIBCXX_3.4.29. The loader refuses that on Ubuntu 22.04, Debian 12
and RHEL 8 and 9, so the Linux head could not open a window there and
BuildMonitor exited.

It is now built in a manylinux_2_28 container by native/build-linux.sh, the
way DiffEngine builds its viewer's, and the workflow checks the result rather
than trusting it: nothing above GLIBC_2.28, and nothing recorded as needed
outside a short list. That container's linker records every library it is
handed, and raylib hands on libSM and libICE, which a stock Ubuntu lacks, so
the library is linked with --as-needed.

Built that way from this commit, the linux-x64 library needs nothing above
GLIBC_2.27 and GLIBCXX_3.4.21, and loads on the container's own glibc 2.28,
where the committed one is refused. The committed binaries are not changed
here: build-native rebuilds them and opens the PR.
Co-authored-by: SimonCropp <122666+SimonCropp@users.noreply.github.com>
@SimonCropp
SimonCropp merged commit 609b882 into main Oct 10, 2026
13 checks passed
@SimonCropp
SimonCropp deleted the glibc-floor branch October 10, 2026 12:43
SimonCropp added a commit that referenced this pull request Oct 10, 2026
main has #47 squashed, so the two Linux libraries conflict as binaries. Those here were rebuilt from this branch's source, which holds everything #47 did, so they stand. Nothing else differs.
@SimonCropp SimonCropp added this to the 1.0.4 milestone Oct 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant