Hay una herramienta más universal que chrpath
llamado patchelf
. Originalmente fue creado para usarse en la creación de paquetes para Nix y NixOS (sistema de empaquetado y una distribución de GNU/Linux).
En caso de que no haya rpath en un binario (aquí llamado rdsamp), chrpath
falla:
chrpath -r '$ORIGIN/../lib64' rdsamp
rdsamp: no rpath or runpath tag found.
Por otro lado,
patchelf --set-rpath '$ORIGIN/../lib64' rdsamp
tiene éxito muy bien.
Hay una herramienta llamada chrpath
que puede hacer esto, probablemente esté disponible en los paquetes de su distribución.
Tal como dijo @user7610, el camino correcto a seguir es el patchelf
herramienta.
Pero siento que puedo dar una respuesta más completa, cubriendo todos los comandos que uno necesita para hacer exactamente eso.
Para obtener un artículo completo sobre el tema, haga clic aquí
En primer lugar, muchos desarrolladores hablan de RPATH
, pero en realidad significan RUNPATH
. Estas son dos secciones dinámicas opcionales diferentes, y el cargador las maneja de manera muy diferente. Puede leer más sobre la diferencia entre ellos en el enlace que mencioné antes.
Por ahora, recuerda:
- Si
RUNPATH
está configurado,RPATH
se ignora RPATH
está en desuso y debe evitarseRUNPATH
se prefiere porque puede ser anulado porLD_LIBRARY_PATH
Ver el R[UN]PATH actual
readelf -d <path-to-elf> | egrep "RPATH|RUNPATH"
Borrar la RUTA R[UN]
patchelf --remove-rpath <path-to-elf>
Notas:
- Elimina ambos
RPATH
yRUNPATH
Añadir valores a R[UN]PATH
patchelf [--force-rpath] --set-rpath "<desired-rpath>" <path-to-elf>
Notas:
<desired-path>
es una lista de directorios separados por dos puntos, por ejemplo:/my/libs:/my/other/libs
- Si especifica
--force-rpath
, estableceRPATH
, de lo contrario estableceRUNPATH