Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell/Stack/Nix构建失败,需要pkg config>;=0.9.0和开罗>;=1.2.0,但最新版本是pkg config 0.29.2和cairo 1.15.4_Haskell_Cairo_Haskell Stack_Nix_Nixpkgs - Fatal编程技术网

Haskell/Stack/Nix构建失败,需要pkg config>;=0.9.0和开罗>;=1.2.0,但最新版本是pkg config 0.29.2和cairo 1.15.4

Haskell/Stack/Nix构建失败,需要pkg config>;=0.9.0和开罗>;=1.2.0,但最新版本是pkg config 0.29.2和cairo 1.15.4,haskell,cairo,haskell-stack,nix,nixpkgs,Haskell,Cairo,Haskell Stack,Nix,Nixpkgs,我正在使用Stack和Nix构建一个Haskell项目,这取决于Hackage中的cairo库 构建项目时,出现一个错误:找不到pkg config>=0.9.0或cairo>=1.2.0。然而,根据他们的网站,最新版本是pkg config 0.29.2和cairo-1.15.4,这也反映在Nix包管理器中 另一方面,还有 ,这进一步混淆了这个问题 问题 为什么预期版本与nixpkgs和pkg config/cairo网站上发布的版本有如此大的差异 要在macOS上构建,您需要得到什么建议(最

我正在使用Stack和Nix构建一个Haskell项目,这取决于Hackage中的
cairo

构建项目时,出现一个错误:找不到
pkg config>=0.9.0
cairo>=1.2.0
。然而,根据他们的网站,最新版本是
pkg config 0.29.2
cairo-1.15.4
,这也反映在Nix包管理器中

另一方面,还有 ,这进一步混淆了这个问题

问题
  • 为什么预期版本与
    nixpkgs
    pkg config
    /
    cairo
    网站上发布的版本有如此大的差异

  • 要在macOS上构建,您需要得到什么建议(最佳情况:对系统包使用Nix,对Haskell包使用Stack)

  • 复制步骤:

    > stack new cairo-test simple && cd cairo-test
    
    # Now, to get Cairo
    > stack install cairo
    
    cairo-0.13.3.1: configure ...
    Process exited with code: ExitFailure 1
    Configuring cairo-0.13.3.1...
    setup: The program 'pkg-config' version >=0.9.0 is required but it could not be found.
    
    # This version doesn't seem to exist (not on the pkg-config website, either).
    > nix-env -qaP pkg-config
    nixpkgs.pkgconfig          pkg-config-0.29.2
    nixpkgs.pkgconfigUpstream  pkg-config-0.29.2
    
    # However, if installed, a new error:
    > nix-env -i pkg-config
    installing ‘pkg-config-0.29.2’
    building path(s) ‘/nix/store/m4ks2si7b78757c1rc43r0833pxkvjb3-user-environment’
    created 102 symlinks in user environment
    > stack install cairo
    setup: The pkg-config package 'cairo' version >=1.2.0 is required but 
    it could not be found.
    
    # Again, this version doesn't seem to exist, either on the site on in `nixpkgs`
    > nix-env -qaP cairo
    nixpkgs.cairo  cairo-1.14.8
    
    # Installing it anyway, to see what the next error is
    > nix-env -i cairo
    installing ‘cairo-1.14.8’
    building path(s) ‘/nix/store/dcx0in96wcd7yd8q71y93jd5306vag8g-user-environment’
    created 112 symlinks in user environment
    
    # Get the same version error now that Cairo is installed
    setup: The pkg-config package 'cairo' version >=1.2.0 is required but it could not be found.
    

    通过安装Homebrew,然后使用
    brew安装cairo
    安装cairo,我能够构建该项目

    但是,这安装了Cairo版本1.14-与安装的Nix相同!当我使用
    brew info cairo
    进行检查时,我会看到更多信息:

    cairo: stable 1.14.8 (bottled), devel 1.15.4, HEAD
    
    ==> Dependencies
    Build: pkg-config ✘
    Required: freetype ✔, fontconfig ✔, libpng ✔, pixman ✔, glib ✔
    
    我尝试用Nix安装这些依赖项,并卸载Homebrew。运气不好--链接错误太多了。所以我重新安装了自制软件,它又能工作了


    这不是我想要的好的、干净的解决方案(必须安装一个外部软件包管理器),但它现在确实解决了问题。

    问题不在于库版本,
    1.14.8
    大于
    1.2.0
    。问题是cairo开发文件没有链接到您的环境中,也就是说,
    $PKG\u CONFIG\u PATH
    没有设置

    三种解决方案:

  • /nix/store
    中找到cairo dev目录,并将其添加到
    PKG\u CONFIG\u路径
    。例如:

     $ cairodev=$(nix-store --query --outputs $(nix-instantiate '<nixpkgs>' -A cairo) | grep dev$)
     $ export PKG_CONFIG_PATH=$cairodev:$PKG_CONFIG_PATH
    

  • 我远不是使用Nix进行Haskell开发的专家,但通常要使用Nix的库包,必须打开Nix shell:
    Nix shell-p pkg config cairo
    nix:
      enable: true
      packages: [pkgconfig, cairo]