В дополнение к «одно- пользовательский режим », я отвечаю для пользователей NixOS . Обычно вы не можете запускать двоичные файлы на NixOS.
Если вы устанавливаете пакеты локально с помощью nix-env -i
, все ваши .so
файлы хранятся в ~ / .nix-profile / lib /
.
Если вы устанавливаете пакеты глобально , указав их в /etc/nixos/configuration.nix
, ваши соответствующие файлы .so
можно найти в ] / nix / var / nix / profiles / system / sw / lib /
. Точнее, только символические ссылки на соответствующие файлы где-то в / nix / store /
находятся в этом каталоге.
Итак, если вы устанавливаете пакеты глобально, решение Ивана Захарьящева будет выглядеть так:
$ patchelf --set-interpreter /nix/var/nix/profiles/system/sw/lib/ld-linux-x86-64.so.2 ./YOUREXECUTABLE
$ LD_LIBRARY_PATH=/nix/var/nix/profiles/system/sw/lib ./YOUREXECUTABLE
Чтобы первая команда работала, вам необходимо установить glibc
глобально. Вы также можете изменить вторую команду, если у вас есть пакеты, установленные как глобально, так и для каждого пользователя:
$ LD_LIBRARY_PATH=/home/YOURUSERNAME/.nix-profile/lib:/nix/var/nix/profiles/system/sw/lib ./YOUREXECUTABLE
Возможно, необходимый файл .so
просто не установлен в системе, поэтому вы есть ошибка типа:
./YOUREXECUTABLE: error while loading shared libraries: libX11.so.6: cannot open shared object file: No such file or directory
Я не знаю, как найти соответствующий пакет для отсутствующего файла в целом, но вы можете погуглить имя файла .so
, установить соответствующий пакет и попробовать чтобы снова запустить исполняемый файл с пользовательским LD_LIBRARY_PATH
.