CHRPATH(1)
π CHRPATH β like, the manual page, bestie π
okay so real talk, this is chrpath(1) β the little tool that goes "change rpath/runpath in binaries" and honestly? it's giving linker whisperer energy. if you've ever had a binary that just π cannot find its libraries, this is your girl.
β¨ SYNOPSIS β¨
chrpath [ -v | --version ] [ -d | --delete ] [ -r <path> | --replace
<path> ] [ -c | --convert ] [ -l | --list ] [ -h | --help ] <program> [
<program> ... ]
like yes, that's a lot of brackets, but it's literally just "pick your vibe, then hand me one or more <program>s" π«Ά
πΈ DESCRIPTION πΈ
so chrpath changes, lists or removes the rpath or runpath setting in a binary. periodt.
and what even is that? okay so the rpath β or the runpath if one is present β is literally where the runtime linker should look for the libraries needed for a program. it's the little map your binary hands to the dynamic linker like "bestie, the libs are over there" πΊοΈβ¨
π OPTIONS π
-v|--versionβ display program version number. short, sweet, iconic.-d|--deleteβ delete the currentrpathorrunpathsetting. bye bye π-c|--convertβ convert therpathsetting into arunpathsetting. glow-up, but for ELF metadata π-r <path>|--replace <path>β replace the currentrpathorrunpathsetting with the path given. β οΈ the new path must be shorter or the same length as the current path β no growing, she can only shrink or stay exactly the same size, no cap.-k|--keepgoingβ do not fail on the first error, but process all arguments before returning the error. main character energy: she finishes the whole list before she complains π€-l|--listβ list the currentrpathorrunpath. this is the default btw, so if you don't say anything, this is what you get π-h|--helpβ show usage information. the classic.
π EXIT STATUS π
0β if all operations were successful. slay. flawless. no notes. β>0β if one of the operations failed. and heads up: a failing operation terminates the program unless-kis specified. so if you didn't pass-k, one oopsie and she's OUT πͺπ¨
π BUGS π
okay so the tea β β there are two things this program genuinely can't do:
- This program cannot create an
RPATHtag if the ELF does not have one. - It can only replace an
RPATHwith one of equal or shorter length.
and why? because (and this is the actual reason, quoted-with-feeling): moving ELF sections following a lengthened string table would be difficult and error-prone at best, and is sometimes outright impossible due to issues like limited ranges in jump instructions. so likeβ¦ yeah. she's not being lazy, the file format is just built different π«
π AUTHOR π
the chrpath program was written by Petter Reinholdtsen <pere@hungry.com>, based on works by Geoffrey Keating <geoffk@ozemail.com.au> and Peeter Joot <peeterjoot@protonmail.com>. legends, all of them π
this manual page was originally written by Tollef Fog Heen <tfheen@debian.org>, for the Debian GNU/Linux system (but may be used by others β she's generous like that π).
and that's the whole page, bestie!! π this is chrpath, from May 4, 2002, living in the chrpath source/version zone β old enough to be vintage, still out here doing the work. iykyk π¦π
β¨
π¦ where this page comes from
- alpine 3.22: chrpath-doc 0.18-r0 Β· GPL-2.0-or-later
- alpine 3.23: chrpath-doc 0.18-r0 Β· GPL-2.0-or-later
- alpine 3.24: chrpath-doc 0.18-r0 Β· GPL-2.0-or-later
- arch rolling: chrpath 0.18-1 Β· GPL2
- debian trixie: chrpath 0.18-1
- nixos 26.05: chrpath 0.18
- nixpkgs unstable: chrpath 0.18
- opensuse-leap 16.0: chrpath 0.17-160000.2.2 Β· GPL-2.0-or-later
- opensuse-leap 16.0: chrpath 0.17-160000.2.2 Β· GPL-2.0-or-later
- opensuse-leap 16.0: chrpath 0.17-160000.2.2 Β· GPL-2.0-or-later
- opensuse-leap 16.0: chrpath 0.17-160000.2.2 Β· GPL-2.0-or-later
- ubuntu questing: chrpath 0.18-1
- ubuntu resolute: chrpath 0.18-1build1
- ubuntu stonking: chrpath 0.18-1build1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms