Release builds fail on macOS 27: Rust 1.95 strips proc-macro dylibs with misaligned __LINKEDIT (fixed in Rust 1.98)
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 1/5
- Tiempo estimado
- Menos de una hora
- Aptitud para principiantes
- 80/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- macos, rust
- Área
- build-system
Línea de trabajo
La corrección es un cambio de una línea en el channel de rust-toolchain.toml en la raíz del repo, elevando el pin de 1.95.0 a 1.98.0 o posterior (1.99.0 es la versión estable actual). Verifica con cargo build --release -p buzz-db en macOS 27, que anteriormente fallaba con el mis-aligned LINKEDIT dlopen error; la carga de sqlx-macros dylib es la señal de que funcionó. Revisa #8049 primero, ya que actualiza las herramientas gestionadas por Hermit mientras mantiene el pin en 1.95.0 y puede entrar en conflicto.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
On macOS 27, cargo build --release of any crate that uses sqlx macros fails with the pinned Rust 1.95.0 toolchain. The cause is a known LLVM bug that is already fixed in Rust 1.98.0, so bumping rust-toolchain.toml to 1.98 or later resolves it. (#8049 upgrades the Hermit-managed tools but keeps the pin at 1.95.0.)
Reproduction
- macOS 27.2 (26B5091g), Xcode 27.0, arm64, at
block/buzzmain with the pinned toolchain:
$ cargo build --release -p buzz-db
error: …/libsqlx_macros-<hash>.dylib: dlopen(…): … mis-aligned LINKEDIT string pool, fileOffset=0x008730AC
error[E0432]: unresolved imports `self::encode::Encode`, …
error: could not compile `sqlx` (lib) due to 2 previous errors
cargo checkand tests pass, because the dev profile doesn't strip. Release builds ofbuzz-relayand anything else that depends onsqlxmacros fail the same way.
Root cause
- Cargo's release profile defaults to
strip = "debuginfo". On macOS,rustcstrips with its bundledrust-objcopy(LLVM), not Apple'sstrip. - LLVM's Mach-O objcopy wrote
__LINKEDITentries at offsets that are only 4-byte aligned, which macOS 27's dyld now rejects. - Upstream reports and fixes:
- rust-lang/rust#157750
- llvm/llvm-project#203678, fixed by llvm/llvm-project#203680
- picked up in rust-lang/rust#158410, milestone 1.98.0
Checked on the same sqlx-macros dylib:
| Step | Result on macOS 27.2 |
|---|---|
| Unstripped | loads |
Apple strip -S / strip -x |
loads |
LLVM objcopy --strip-debug (Rust 1.95 / 1.96 / 1.97.1) |
mis-aligned LINKEDIT string pool |
cargo build --release -p buzz-db on Rust 1.99.0 |
builds; dylib loads |
Small proc-macro dylibs often pass by luck of alignment, which is why a trivial repro may not trigger it. The sqlx-macros dylib Buzz builds (~12 MB, with Buzz's sqlx features) triggers it reliably.
Suggested fix
Bump rust-toolchain.toml to 1.98.0 or later (current stable is 1.99.0).
Until then, this workaround disables stripping only for build-time artifacts (proc macros, build scripts) and leaves shipped binaries unchanged:
CARGO_PROFILE_RELEASE_BUILD_OVERRIDE_STRIP=none cargo build --release
or
[profile.release.build-override]
strip = "none"
- Lenguaje dominante
- Rust
- Estrellas
- 35.6k
- Forks
- 4.7k
- Merge medio
- 2 d 7 h
- PR fusionados (30 d)
- 181
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de block/buzz
-
Mobile: opening an attachment names the file after the link text instead of the imeta filenamePosiblemente ocupada @wenhaoone la tomó hace 4 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 90/100
Los mantenedores suelen responder en 1 día
-
Desktop: private project home channels show no lock icon in the sidebarPosiblemente ocupada @Bartok9 la tomó hace 5 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
Los mantenedores suelen responder en 1 día
-
Desktop crashes on launch: undefined is not an object (evaluating 'e.participantPubkeys.map')Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
block/buzz#7880 · 2 comentarios · 2 reacciones ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
block/buzz#7824 · 1 reacción ·
Los mantenedores suelen responder en 1 día
Todos los issues de block/buzz
Issues similares
-
documentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
fastrevmd-lab/rustmistmcp#161 ·
-
arch-audit refactor
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
SocketDev/socket-patch#1011 ·
Los mantenedores suelen responder en 1 día
-
bug user-priority/P2
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
Los mantenedores suelen responder en 1 día
-
opencode: an unanswered --version probe launches opencode 2 without per-session service isolationAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Los mantenedores suelen responder en 1 día
-
security-advisory
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
MinBZK/regelrecht#1686 ·
Los mantenedores suelen responder en 1 día