簡體   English   中英

stack --nix build抱怨ghc版本不匹配

[英]stack --nix build complains about ghc version mismatch

使用stack --nix build在NixOS上構建threepenny-gui時,我得到錯誤,說我的ghc版本錯誤。 然后我嘗試了stack --nix setup ,它沒有運行,因為bash在NixOS上的意外路徑上(這是預期的,因為堆棧文檔只提到stack --nix build not setup )。 我錯過了什么?

僅供參考,為了解決zlib問題,我還添加了一個shell.nix和default.nix,每個https://github.com/commercialhaskell/stack/issues/2130

編輯:能夠使用mkkeankylej從上面的鏈接建議的方法構建,即編輯~/.stack/config.yaml並將zlib添加到buildInputs中的buildInputs但是我仍然想知道是否有辦法做它沒有回落到nix-shell? 聽起來像stack --nix build應該只要nix-shell方法可以工作。

首先, threepenny-gui似乎沒有提供stack.yaml ,即項目沒有配置為使用stack構建。 因此,我想知道為什么你甚至打擾使用stack因為這不比使用cabal-install甚至直接使用Nix構建項目更容易。 最簡單,最快捷的方法可能是通過運行來配置構建:

$ nix-shell "<nixpkgs>" -A haskellPackages.threepenny-gui.env --run "cabal configure"

之后,您可以根據需要簡單地“建立”項目並使用它(在nix-shell內部或外部); 編譯器和所有必要的構建依賴項由Nix提供。

如果您不想這樣,那么您可以使用正常的cabal-install方法:

$ cabal sandbox init
$ cabal install --only-dependencies
$ cabal configure
$ cabal build

該構建可能需要系統庫,如libz ,因此您必須確保這些庫可用。 有一百萬種不同的方法可以實現這一目標,但最干凈的恕我直言如下:

$ zlibinc=$(nix-build --no-out-link "<nixpkgs>" -A zlib.dev)
$ zliblib=$(nix-build --no-out-link "<nixpkgs>" -A zlib.out)
$ cabal install --only-dependencies --extra-include-dirs=$zlibinc --extra-lib-dirs=$zliblib

最后但並非最不重要的是,對我來說,為什么你的stack build --nix命令不會成功,這是stack build --nix ,因為該命令將使用Nix自動安裝正確版本的GHC。 因此,如果這不起作用,那么我最好的猜測是你使用舊版本的stack ,但該功能無法正常工作。 我已經嘗試使用Nix提供的stack二進制構建,堆棧1.3.2,並且它可以編譯當前git checkout of threepenny-gui就好了:

$ git clone git://github.com/HeinrichApfelmus/threepenny-gui.git
Cloning into 'threepenny-gui'...
remote: Counting objects: 4102, done.        
remote: Total 4102 (delta 0), reused 0 (delta 0), pack-reused 4101        
Receiving objects: 100% (4102/4102), 1.88 MiB | 581.00 KiB/s, done.
Resolving deltas: 100% (2290/2290), done.

$ cd threepenny-gui
$ stack init
Looking for .cabal or package.yaml files to use to init the project.
Using cabal packages:
- threepenny-gui.cabal

Selecting the best among 9 snapshots...

* Partially matches lts-7.16
    websockets-snap not found
        - threepenny-gui requires >=0.8 && <0.11
    Using package flags:
        - threepenny-gui: buildexamples = False, network-uri = True, rebug = False

* Matches nightly-2017-01-17

Selected resolver: nightly-2017-01-17
Initialising configuration using resolver: nightly-2017-01-17
Total number of user packages considered: 1
Writing configuration to file: stack.yaml
All done.
$ stack build --nix --nix-packages zlib
threepenny-gui-0.7.1.0: configure (lib)
Configuring threepenny-gui-0.7.1.0...
threepenny-gui-0.7.1.0: build (lib)
Preprocessing library threepenny-gui-0.7.1.0...
[...]
Registering threepenny-gui-0.7.1.0...

這適用於沒有任何專門編輯的nix-shell配置文件,也不需要特殊的stack定制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM