如何使用 Nix 包管理器在 64 位系统上构建 32 位应用程序?

如何使用 Nix 包管理器在 64 位系统上构建 32 位应用程序?

看来 Nix 应该能够在 64 位系统上安装和构建 32 位软件包。它的缓存已经存储了为 i686 架构构建的整个 nixpkgs 树,下载和安装它们应该没有问题,但我看不到这样做的方法。

答案1

如果您还不知道如何使用 nix 构建单独的包,这是说明

尼克斯包装定义特殊变量pkgsi686Linux对于 i686 软件包树和呼叫包_i686用于调用任意 nix 表达式并覆盖system="i686-linux".它们的用法非常简单。

方法一:

jsoncpp06_32 = nixpkgs.callPackage_i686 ./jsoncpp06.nix { };

方法二:

myPackage32 = pkgs.pkgsi686Linux.stdenv.mkDerivation {
    name = "myPackage-i686-0.0.1";

    boost155 = nixpkgs.pkgsi686Linux.boost155;
    buildInputs = [
        pkgs.gcc_multi
        pkgs.python2
        pkgs.pkgconfig

        pkgs.pkgsi686Linux.ffmpeg_2_2
        pkgs.pkgsi686Linux.boost155
        pkgs.pkgsi686Linux.openssl
        pkgs.pkgsi686Linux.curl
        pkgs.pkgsi686Linux.opencv

        jsoncpp06_32
    ];

};

答案2

也许这也是一个可行的解决方案。

默认.nix

{ system ? builtins.currentSystem }:
let pkgs = import <nixpkgs> { inherit system; }
in pkgs.stdout.mkDerivation {
   # ... as usual
}

然后你跑

% nix-build default.nix --argstr "x86_64-linux"

% nix-build default.nix --argstr "i686-linux"

相关内容