【问题标题】:glpk and pcre not found (NIXOS)找不到 glpk 和 pcre (NIXOS)
【发布时间】:2016-06-17 11:54:41
【问题描述】:

我正在尝试在我的 NixOS 中构建自己的 nix-shell 环境。我有 2 个 .nix 文件,default.nix 和 shell.nix,这是配置:

default.nix:

{ stdenv, haskellngPackages}:

let
  env = haskellngPackages (p: with p; [
        aeson
        bytestring
        conduit
        snap
        ghcjs
        text
        wai
        warp
        yaml
        haskell.packages.lts-4_01.ghc
        ]);

in
  stdenv.mkDerivation {
  name = "RiziLab";

buildInputs = [
  glpk
  pcre
  env
];

    STACK_IN_NIX_EXTRA_ARGS
       = " --extra-lib-dirs=${glpk}/lib"
       + " --extra-include-dirs=${pglpk}/include"
       + " --extra-lib-dirs=${pcre}/lib"
       + " --extra-include-dirs=${pcre}/include"
    ;
}

shell.nix:

{ pkgs ? (import <nixpkgs> {} ) }:

(import ./default.nix) {
  stdenv  = pkgs.stdenv;
  haskellngPackages = pkgs.haskellngPackages;
}

但是当我做 nix-shell 时,我得到了这个错误:

error: undefined variable ‘glpk’

据我了解,default.nix 只是一个由 shell.nix、cmiiw 调用的函数。问题是:

  1. 我的代码有错误吗?
  2. 我使用了{nixpkgs ? (import &lt;nixpkgs&gt; {} ) }{pkgs ? (import &lt;nixpkgs&gt; {})},但仍然出现同样的错误,这两者有什么不同吗?
  3. 可以排除 ghcwithPackages 吗?

【问题讨论】:

    标签: nix nixos nixpkgs


    【解决方案1】:

    glpk 未在 default.nix 中定义是问题所在。
    glpk 路径为 pkgs.glpk 但在 default.nix 范围内没有 pkgs,并且 glpk 未作为参数传递到函数。

    另外,不需要有2个单独的文件,可以将整个组合到一个文件中:

    { nixpkgs ? import <nixpkgs> {}, compiler ? "lts-4_1" }:
    let
      inherit (nixpkgs) pkgs;
      ghc = pkgs.haskell.packages.${compiler}.ghcWithPackages (ps: with ps; [
              aeson
              bytestring
              conduit
              snap
              # ghcjs # not a package but a compiler
              text
              wai
              warp
              yaml
            ]);
    in
    pkgs.stdenv.mkDerivation {
      name = "RiziLab";
      buildInputs = with pkgs; [ ghc glpk pcre ];
      shellHook = "eval $(egrep ^export ${ghc}/bin/ghc)";
      STACK_IN_NIX_EXTRA_ARGS = with pkgs; 
          " --extra-lib-dirs=${glpk}/lib"
        + " --extra-include-dirs=${glpk}/include"
        + " --extra-lib-dirs=${pcre}/lib"
        + " --extra-include-dirs=${pcre}/include"
      ;
    }
    

    您可以在Nixpkgs manual 中了解有关在 nix 中使用 haskell 的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-21
      • 2014-08-05
      • 1970-01-01
      • 2016-03-31
      • 2012-02-16
      • 2012-05-06
      • 2014-07-07
      • 1970-01-01
      相关资源
      最近更新 更多