コンテンツにスキップ

nix-ld

LinuxのELFバイナリでは、通常、ライブラリのインタプリタのパスがハードコードされている。これはたいてい /lib64/ld-linux-x86-64.so.2 が指定されており、システムのこのパスにインタプリタが置かれていることが要請される。

インタプリタは共有ライブラリの名前からパスを解決して動的リンクするのだが、NixOSでは独立したライブラリ環境を重視するため、これをデフォルトで用意していない。

基本的な解決は使用したいインタプリタのパスが入った専用のバイナリをビルドすることだ。他の環境でビルドされたバイナリでも、patchelf を使うことでこのパスを書き換えたバイナリを作成することができる。

nix-ld は別の方向からこれを解決する。nix-ld を有効化すると /lib64/ld-linux-x86-64.so.2 が配置される。このインタプリタは NIX_LD_LIBRARY_PATH に存在するパスから共有ライブラリをリンクする。基本的にはなにもライブラリを解決しないNixOSらしい方針で、環境ごとに作られた NIX_LD_LIBRARY_PATH で棲み分けができる。

導入は、以下。

  programs.nix-ld.enable = true;