help-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How should I install non-guix software?


From: Pierre Neidhardt
Subject: Re: How should I install non-guix software?
Date: Tue, 07 Aug 2018 19:11:31 +0200
User-agent: mu4e 1.0; emacs 26.1

Indeed.

Foreign binaries must be patched to modify the interpreter (i.e. the dynamic
library loader, also known as ld-linux) and the RPATH (the library path).

$ patchelf --print-interpreter /bin/sh
/gnu/store/l4lr0f5cjd0nbsaaf8b5dmcw1a1yypr3-glibc-2.27/lib/ld-linux-x86-64.so.2
$ patchelf --set-interpreter 
/gnu/store/l4lr0f5cjd0nbsaaf8b5dmcw1a1yypr3-glibc-2.27/lib/ld-linux-x86-64.so.2 
/path/to/foo/bin

You can then check the libraries with ldd:

$ ldd /path/to/foo/bin
        linux-vdso.so.1 (0x00007ffefb6e4000)
        libreadline.so.7 => 
/gnu/store/s5qvyb3lp0b12qmgiwj3754an7dr1r0s-readline-7.0.3/lib/libreadline.so.7 
(0x00007f0b638f7000)
        libhistory.so.7 => 
/gnu/store/s5qvyb3lp0b12qmgiwj3754an7dr1r0s-readline-7.0.3/lib/libhistory.so.7 
(0x00007f0b636ed000)
        libncursesw.so.6 => 
/gnu/store/s9gbq6q72w9vf7zjm0amjf1iw1fy856h-ncurses-6.1/lib/libncursesw.so.6 
(0x00007f0b6347e000)
        libdl.so.2 => 
/gnu/store/l4lr0f5cjd0nbsaaf8b5dmcw1a1yypr3-glibc-2.27/lib/libdl.so.2 
(0x00007f0b6327a000)
        libgcc_s.so.1 => 
/gnu/store/vla5j7pbkpcp39lsdfsmz7m9azn48lr4-gcc-5.5.0-lib/lib/libgcc_s.so.1 
(0x00007f0b63063000)
        libc.so.6 => 
/gnu/store/l4lr0f5cjd0nbsaaf8b5dmcw1a1yypr3-glibc-2.27/lib/libc.so.6 
(0x00007f0b62cb0000)
        libbgdrtm.so => not found

In this example, one library is missing.  If you check the RPATH, you can see
the list of folders that are search for libraries:

$ patchelf --print-rpath /path/to/foo/bin
/gnu/store/s5qvyb3lp0b12qmgiwj3754an7dr1r0s-readline-7.0.3/lib:/gnu/store/s9gbq6q72w9vf7zjm0amjf1iw1fy856h-ncurses-6.1/lib:/gnu/store/l4lr0f5cjd0nbsaaf8b5dmcw1a1yypr3-glibc-2.27/lib:/gnu/store/vla5j7pbkpcp39lsdfsmz7m9azn48lr4-gcc-5.5.0-lib/lib:/gnu/store/vla5j7pbkpcp39lsdfsmz7m9azn48lr4-gcc-5.5.0-lib/lib/gcc/x86_64-unknown-linux-gnu/5.5.0/../../..

You can extend the RPATH to include the missing library:

$ patchelf --set-rpath /path/to/missing/lib /path/to/foo/bin

And it should work!
Hope that helps!
-- 
Pierre Neidhardt

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]