I'm using nix
in "single-user mode" in a system where I'm not the root (see below for a description of my nix setup).
I wanted to quickly run one of my binaries which is dynamically linked with a library which is absent in the system.
So, I've installed the library with nix
:
$ nix-env -qa 'gmp'
gmp-4.3.2
gmp-5.1.3
$ nix-env -i gmp-5.1.3
But the library is still not found by the linker:
$ ldd -r ../valencies
../valencies: /lib64/libc.so.6: version `GLIBC_2.15' not found (required by ../valencies)
../valencies: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ../valencies)
linux-vdso.so.1 => (0x00007fffbbf28000)
/usr/local/lib/libsnoopy.so (0x00007f4dcfbdc000)
libgmp.so.10 => not found
libffi.so.5 => /usr/lib64/libffi.so.5 (0x00007f4dcf9cc000)
libm.so.6 => /lib64/libm.so.6 (0x00007f4dcf748000)
librt.so.1 => /lib64/librt.so.1 (0x00007f4dcf540000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f4dcf33c000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4dcf11f000)
libc.so.6 => /lib64/libc.so.6 (0x00007f4dced8b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4dcfde7000)
undefined symbol: __gmpz_gcd (../valencies)
undefined symbol: __gmpn_cmp (../valencies)
undefined symbol: __gmpz_mul (../valencies)
undefined symbol: __gmpz_fdiv_r (../valencies)
undefined symbol: __gmpz_fdiv_q_2exp (../valencies)
undefined symbol: __gmpz_com (../valencies)
undefined symbol: __gmpn_gcd_1 (../valencies)
undefined symbol: __gmpz_sub (../valencies)
symbol memcpy, version GLIBC_2.14 not defined in file libc.so.6 with link time reference (../valencies)
undefined symbol: __gmpz_fdiv_q (../valencies)
undefined symbol: __gmpz_fdiv_qr (../valencies)
undefined symbol: __gmpz_add (../valencies)
undefined symbol: __gmpz_init (../valencies)
undefined symbol: __gmpz_ior (../valencies)
undefined symbol: __gmpz_mul_2exp (../valencies)
undefined symbol: __gmpz_xor (../valencies)
undefined symbol: __gmpz_and (../valencies)
symbol __fdelt_chk, version GLIBC_2.15 not defined in file libc.so.6 with link time reference (../valencies)
undefined symbol: __gmpz_tdiv_qr (../valencies)
undefined symbol: __gmp_set_memory_functions (../valencies)
undefined symbol: __gmpz_tdiv_q (../valencies)
undefined symbol: __gmpz_divexact (../valencies)
undefined symbol: __gmpz_tdiv_r (../valencies)
$
Look, it is present in the filesystem:
$ find / -name 'libgmp.so.10' 2>/dev/null
/nix/store/mnmzq0qbrvw6dv1k2vj3cwz9ffdh05zr-user-environment/lib/libgmp.so.10
/nix/store/fnww2w81hv5v3dl9gsb7p4llb7z7krzd-gmp-5.1.3/lib/libgmp.so.10
$
What do I do so that libraries installed by nix
are "visible"?
Probably, the standard user-installation script of nix
modifies .bash_profile
to add its bin/
into PATH
, but does not do something analogous for libraries.
My nix setup:
The only thing I have asked the root to do for me was: mkdir -m 0755 /nix && chown ivan /nix
, otherwise I've followed the standard simple nix installation procedure. So now I can use custom programs from nix packages. I couldn't do this nicely without any help from the root at all, i.e., without /nix/
, because /nix/
was not available for me; I could of course use another directory, but then the pre-built binary packages wouldn't be valid and all packages would have to be rebuilt, according to the nix documentation. In my case, it was simpler to ask for /nix/
for me.
Another thing I've done is adding to ~/.bash_profile
:
export NIX_CONF_DIR=/nix/etc/nix
so that I can edit nix.conf
. (It was supposed to be in the root-controlled /etc/
otherwise. I did it because I wanted to build-max-jobs
and build-cores
settings in it.)
nix-env
, not to mentionnix.conf
. What OS is this? Also, what do you repeated references tonix
mean? I've only ever heard it used as an abbreviation toUnix
, but it seems you are using it in a more specific context. – Faheem Mitha Mar 31 '15 at 19:43nix
is a modern package manager, and nixOS is a distro, and Hydra is a system for constantly rebuilding nix packages, and nixOps is a tool to manage an infrastructure (a network of several hosts) declaratively, and disNix to manage a set of services declaratively (on top of an infrastructure).guix
is a GNU offspring ofnix
, with a distro (promoted as 100%libre IIC – imz -- Ivan Zakharyaschev Mar 31 '15 at 20:56guix
. – Faheem Mitha Mar 31 '15 at 20:59