From f3b5efd7982737f719527d408351f06aa1955a94 Mon Sep 17 00:00:00 2001 From: SulfurNitride Date: Sat, 14 Mar 2026 04:26:39 -0500 Subject: Fix Qt version mixing: patchelf qt6plugins to use bundled lib/ Qt platform plugins (libqxcb.so, libqxcb-glx-integration.so, etc.) kept aqtinstall's hardcoded RPATH (/opt/qt6/6.10.2/gcc_64/lib) which doesn't exist on user systems. The linker fell through to system Qt, loading the wrong version into the process link map. When PyQt6 bindings later loaded libQt6OpenGLWidgets, glibc reused the already-cached system version, causing private-API symbol mismatches against our bundled Qt 6.10 (seen on Mint, Bazzite, and likely all distros with system Qt installed). All Qt plugins are one subdir deep under qt6plugins/, so $ORIGIN/../../lib correctly resolves to our lib/ for all of them. Co-Authored-By: Claude Sonnet 4.6 --- docker/build-inner.sh | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'docker') diff --git a/docker/build-inner.sh b/docker/build-inner.sh index ca2c648..42fa4c7 100755 --- a/docker/build-inner.sh +++ b/docker/build-inner.sh @@ -341,6 +341,12 @@ patchelf --force-rpath --set-rpath '$ORIGIN/lib' "${OUT_DIR}/ModOrganizer-core" find "${OUT_DIR}/plugins" -maxdepth 1 -name "*.so" -exec patchelf --force-rpath --set-rpath '$ORIGIN/../lib' {} \; 2>/dev/null || true find "${OUT_DIR}/plugins/libs" -name "*.so" -exec patchelf --force-rpath --set-rpath '$ORIGIN/../../lib' {} \; 2>/dev/null || true find "${OUT_DIR}/lib" \( -name "*.so" -o -name "*.so.*" \) -exec patchelf --force-rpath --set-rpath '$ORIGIN' {} \; 2>/dev/null || true +# Qt platform plugins keep aqtinstall's hardcoded RPATH (/opt/qt6/.../lib) which +# doesn't exist on user systems — the linker falls through to system Qt, loading +# the wrong version and poisoning the link map for all subsequent Qt library +# lookups (including PyQt6 bindings). All Qt plugins sit one subdir deep under +# qt6plugins/, so $ORIGIN/../../lib resolves correctly to our lib/ for all of them. +find "${OUT_DIR}/qt6plugins" -name "*.so" -exec patchelf --force-rpath --set-rpath '$ORIGIN/../../lib' {} \; 2>/dev/null || true # ── Launcher script ── cat > "${OUT_DIR}/fluorine-manager" <<'LAUNCH' -- cgit v1.3.1