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

2024-01-20

在 NixOS 上构建 Threepenny-gui 时stack --nix build,我收到错误消息,说我的 ghc 版本错误。然后我尝试了stack --nix setup,它不会运行,因为 bash 位于 NixOS 上的意外路径上(这是预期的,因为堆栈文档仅提到stack --nix build not setup)。我缺少什么?

仅供参考,为了处理 zlib 问题,我还添加了 shell.nix 和 default.nix 每个https://github.com/commercialhaskell/stack/issues/2130 https://github.com/commercialhaskell/stack/issues/2130

编辑:能够使用 mkkeankylej 从上面的链接建议的方法进行构建,即编辑~/.stack/config.yaml并将 zlib 添加到buildInputs在 shell.nix 中但我仍然想知道是否有一种方法可以做到这一点而无需回退到 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命令不会成功,因为该命令将使用 Nix 自动安装正确版本的 GHC。因此,如果这不起作用,那么我最好的猜测是您使用的是旧版本stack该功能无法正常工作的地方。我已经尝试使用该构建stackNix 提供的二进制文件,堆栈 1.3.2,它可以编译当前的 git checkoutthreepenny-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.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stack --nix build 抱怨 ghc 版本不匹配 的相关文章

随机推荐

  • 通过求和来聚合重复行

    根据我的问题 1 识别一组变量是否唯一标识数据的每一行 https stackoverflow com q 22834725 1414455 2 根据给定的变量集标记所有重复的行 https stackoverflow com q 2289
  • CMake 源代码中大小写一致性的工具

    CMake 命令在小写 大写和混合大小写下均有效 然而 将所有这些内容混合在一个文件中会降低 CMake 代码的可读性 有没有一种工具可以自动纠正这种风格不一致的情况 steveire 的答案链接到正确的资源 但让我明确解释一下 以防这些链
  • 关于 sbrk() 和 malloc()

    我已经彻底阅读了有关 sbrk 的 linux 手册 sbrk 改变程序中断的位置 它定义了结束 进程的数据段 即程序中断是第一个 未初始化数据段末尾之后的位置 And I do know that user space memory s
  • 如何刷新 WinForms DataGridView 上的数据源?

    我从 EntityFramework 模型填充 GridView DataSource gwTimeLog DataSource entities TimeLogs 当新行添加到 entities 时 我尝试更新网格 尝试使用与上面相同的语
  • Microsoft Sync Framework 还存在吗?

    根据MS文档Sync Framework Toolkit https code msdn microsoft com Sync Framework Toolkit 4dc10f0e https code msdn microsoft com
  • NSWindowController 与 NSViewController 之间的区别

    我来自iOS背景并开始学习Cocoa 在iOS除非我们有多个目标iPad and iPhone我们通常有一窗并使用管理屏幕UIViewControllers 每个新屏幕大多数时候都会映射到UIViewController 然而 在可可中 这
  • Treeset.contains() 问题

    所以我已经被一个问题困扰了一段时间 我想我不妨在这里寻求帮助 我将 Ticket 对象添加到 TreeSet Ticket 实现 Comparable 并重写 equals hashCode 和 CompareTo 方法 我需要使用 con
  • 古怪的 __set() 魔术函数

    谁能向我解释一下这种行为的逻辑吗 考虑以下情况 class EPPDomain protected myField public static function buildEPPDomain fieldValue me new self m
  • Select2:未捕获类型错误:options.results 不是函数

    我正在尝试使用 Select2 jquery 插件进行 AJAX 调用 查询似乎有效 但问题发生在 results 被称为options object Uncaught TypeError options results is not a
  • 默认变量值

    如果我在声明变量时没有为其赋值 那么它是否默认为零或只是内存中先前的值 e g float x 声明的变量可以是零初始化 值初始化 or 默认初始化 C 03 标准 8 5 5 恰当地定义了以下各项 To 零初始化T 类型的对象意味着 如果
  • 使用SimpleXmlElement和symfony2输出xml文件

    rootNode new SimpleXMLElement
  • OpenMP 如何重用线程

    我认为线程的创建和删除可能代价高昂 OpenMP 是否尝试重用现有线程 例如 pragma omp parallel sections num threads 4 pragma omp section worker A pragma omp
  • Rust 中连接向量的最佳方法是什么?

    是否有可能在 Rust 中连接向量 如果是这样 有没有一种优雅的方式来做到这一点 我有这样的事情 let mut a vec 1 2 3 let b vec 4 5 6 for val in b a push val 有谁知道更好的方法吗
  • 从 hIcon/hBitmap 获取字节/char*

    我正在开发一个C S应用程序 C 中的服务器和C 中的客户端 我需要发送一些有关当前正在运行的进程和相关图标的信息 我得到了图标文件感谢EnumWindows将此代码放在回调中 Get the window icon HICON hIcon
  • Angular - 不纯管道与函数

    我正在 Angular2 中的数组上实现过滤操作 当数组中的元素发生更改时 纯管道不会触发 因此 我必须使用不纯的管道或使用组件内部的函数进行过滤 如下所示 ngFor let item of items impureFilterPipe
  • 如何正确地从 Promise 返回多个值?

    我最近多次遇到某种情况 不知道如何正确解决 假设以下代码 somethingAsync then afterSomething then afterSomethingElse function afterSomething amazingD
  • 颁发身份超级账本作曲家时授权失败

    我阅读了建议检查 docker yaml 的答案 文件路径如下 我确认用户名是admin 密码是adminpw 不幸的是我仍然收到授权失败错误 我用来发布身份的命令 composer identity issue n trade netwo
  • 如何以 1 秒的间隔更新组件?

    我在戴尔面试时被问到这个问题 new Date 给你一个Date使用当前日期 时间初始化的对象 假设我的屏幕右上角显示当前时间 并且有人这样做了
  • InApp 计费验证 Web 服务器 PHP 上的订单

    我正在使用一个简单的 PHP 脚本来验证 Android 订单以解析客户的下载 receipt GET purchaseData billInfo json decode receipt true signature GET dataSig
  • stack --nix build 抱怨 ghc 版本不匹配

    在 NixOS 上构建 Threepenny gui 时stack nix build 我收到错误消息 说我的 ghc 版本错误 然后我尝试了stack nix setup 它不会运行 因为 bash 位于 NixOS 上的意外路径上 这是