gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1572Shell 203Rust 109Markdown 993728 Definitions

rust: `rpath = false`, la pareja obligatoria de poner lld como enlazador directo

El build con `ld.lld` en el spec murió compilando `std`:

    ld.lld: error: unknown argument '-Wl,-z,origin'
    ld.lld: error: unknown argument '-Wl,-rpath,$ORIGIN/../lib'

Con el enlazador invocado DIRECTO (sin driver de C), los `-Wl,…` que el bootstrap añade para el
rpath de sus propios binarios llegan tal cual a lld, que no los entiende — esa sintaxis existe para
que un `cc` los traduzca.

El rpath sobra igual: con `prefix = "/usr"` las librerías quedan en `/usr/lib`, que ya está en el
camino del cargador. Es lo que hacen las distros que empaquetan rust.

Costó 6 minutos de build descubrirlo, que es lo que vale tener la cadena en la granja: cada intento
falla temprano y con el mensaje exacto.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

65dab8d26241749bb8b73f4144fe6bdfd1ba3ef3 · by Sergio · (1 month ago) · parent e903f486d · browse the tree at this commit

Semantic delta

No definition changed: this change is text, documentation or data.

1 files · +10 −0

diff --git a/recipes/rust.toml b/recipes/rust.toml
index bfc63b04..f1e6de09 100644
--- a/recipes/rust.toml
+++ b/recipes/rust.toml
@@ -117,6 +117,16 @@ channel = "stable"
 codegen-tests = false
 deny-warnings = false
 musl-root = "/usr"
+# ⚠ `rpath = false` es la pareja de haber puesto `ld.lld` como enlazador en el spec del triple.
+# Con el enlazador INVOCADO DIRECTO (sin driver de C), los `-Wl,…` que el bootstrap añade para el
+# rpath de sus propios binarios llegan tal cual a lld, que no los entiende:
+#
+#     ld.lld: error: unknown argument '-Wl,-z,origin'
+#     ld.lld: error: unknown argument '-Wl,-rpath,$ORIGIN/../lib'
+#
+# …y muere compilando `std`. El rpath sobra igual: con `prefix = "/usr"` las librerías quedan en
+# `/usr/lib`, que YA está en el camino del cargador. Es lo que hacen las distros que empaquetan rust.
+rpath = false
 
 [install]
 # ⚠ SIN ESTO EL TOOLCHAIN QUEDA FUERA DEL PATH, y es la trampa de «existe ≠ se encuentra»: el