diff options
| author | SulfurNitride <SulfurNitride@users.noreply.github.com> | 2026-03-14 04:26:39 -0500 |
|---|---|---|
| committer | SulfurNitride <SulfurNitride@users.noreply.github.com> | 2026-03-14 04:26:39 -0500 |
| commit | f3b5efd7982737f719527d408351f06aa1955a94 (patch) | |
| tree | 9ad511dc6445d9a0a942ad9cf095ca27eff38481 /docker | |
| parent | eb780944ec8fb9df7f18c079cbd8eaff5bf96baa (diff) | |
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 <noreply@anthropic.com>
Diffstat (limited to 'docker')
| -rwxr-xr-x | docker/build-inner.sh | 6 |
1 files changed, 6 insertions, 0 deletions
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' |
