Esiste uno strumento più universale di chrpath
chiamato patchelf
. È stato originariamente creato per essere utilizzato nella creazione di pacchetti per Nix e NixOS (sistema di pacchettizzazione e distribuzione GNU/Linux).
Nel caso in cui non ci sia rpath in un binario (qui chiamato rdsamp), chrpath
fallisce:
chrpath -r '$ORIGIN/../lib64' rdsamp
rdsamp: no rpath or runpath tag found.
D'altra parte,
patchelf --set-rpath '$ORIGIN/../lib64' rdsamp
riesce bene.
C'è uno strumento chiamato chrpath
che può farlo - è probabilmente disponibile nei pacchetti della tua distribuzione.
Proprio come ha detto @user7610, la strada giusta da percorrere è il patchelf
strumento.
Ma sento di poter dare una risposta più completa, coprendo tutti i comandi necessari per fare esattamente questo.
Per un articolo completo sull'argomento, fai clic qui
Prima di tutto, molti sviluppatori parlano di RPATH
, ma in realtà significano RUNPATH
. Queste sono due diverse sezioni dinamiche opzionali e il caricatore le gestisce in modo molto diverso. Puoi leggere di più sulla differenza tra loro nel link che ho menzionato prima.
Per ora, ricorda:
- Se
RUNPATH
è impostato,RPATH
viene ignorato RPATH
è deprecato e dovrebbe essere evitatoRUNPATH
è preferito perché può essere sovrascritto daLD_LIBRARY_PATH
Vedi l'attuale R[UN]PATH
readelf -d <path-to-elf> | egrep "RPATH|RUNPATH"
Cancella il R[UN]PATH
patchelf --remove-rpath <path-to-elf>
Note:
- Rimuove entrambi
RPATH
eRUNPATH
Aggiungi valori a R[UN]PATH
patchelf [--force-rpath] --set-rpath "<desired-rpath>" <path-to-elf>
Note:
<desired-path>
è un elenco di directory separate da due punti, ad esempio:/my/libs:/my/other/libs
- Se specifichi
--force-rpath
, impostaRPATH
, altrimenti impostaRUNPATH