【问题标题】:failing cabal install MissingH and network on Windowscabal 在 Windows 上安装 MissingH 和网络失败
【发布时间】:2016-08-06 15:29:45
【问题描述】:

我刚刚安装了一个新的 Haskell 版本:HaskellPlatform-8.0.1-minimal-x86_64-setup-a, 我需要包 MissingH,它需要包网络。 但是 cabal 安装网络会产生:

$ cabal install network
Resolving dependencies...
cabal: Entering directory 'C:\cygwin64\tmp\cabal-tmp-6136\network-2.6.2.1'
Configuring network-2.6.2.1...
configure: WARNING: unrecognized options: --with-compiler
checking build system type... x86_64-unknown-cygwin
checking host system type... x86_64-unknown-cygwin
checking for gcc... C:\PROGRA~1\HASKEL~1\802E01~1.1\mingw\bin\gcc.exe
checking whether the C compiler works... no
configure: error: in `/tmp/cabal-tmp-6136/network-2.6.2.1':
configure: error: C compiler cannot create executables
See `config.log' for more details
cabal: Leaving directory 'C:\cygwin64\tmp\cabal-tmp-6136\network-2.6.2.1'
Failed to install network-2.6.2.1
cabal.exe: Error: some packages failed to install:
network-2.6.2.1 failed during the configure step. The exception was:
ExitFailure 77

首先,我尝试以管理员身份启动 Cygwin 命令窗口,但这并没有解决问题。 然后,我关注了stack cannot build network - where's config.log?

虽然使用堆栈安装会成功,但 虽然我必须运行堆栈设置

$ stack build
Compiler version mismatched, found ghc-8.0.1 (x86_64), but expected minor version match with ghc-7.10.3 (x86_64) (based on resolver setting in C:\tmp\network-2.6.2.1\stack.yaml).
Try running "stack setup" to install the correct GHC into C:\Users\<username>\AppData\Local\Programs\stack\x86_64-windows\

在堆栈设置、堆栈构建之后,我得到:

$ stack test
network-2.6.2.1: test (suite: regression)

testGetAddrInfo: [OK]

         Test Cases  Total
 Passed  1           1
 Failed  0           0
 Total   1           1

network-2.6.2.1: test (suite: simple)

Basic socket operations:
  testSend: [OK]
  testSendAll: [OK]
  testSendTo: [OK]
  testSendAllTo: [OK]
  testSendMany: [OK]
  testSendManyTo: [OK]
  testRecv: [OK]
  testOverFlowRecv: [OK]
  testRecvFrom: [OK]
  testOverFlowRecvFrom: [OK]
  testUserTimeout: [OK]

         Test Cases  Total
 Passed  11          11
 Failed  0           0
 Total   11          11

但我仍然无法继续使用 MissingH。其实还是在尝试安装网络!

$ cabal install MissingH
Resolving dependencies...
cabal: Entering directory 'C:\cygwin64\tmp\cabal-tmp-5596\network-2.6.2.1'
Configuring network-2.6.2.1...
configure: WARNING: unrecognized options: --with-compiler
checking build system type... x86_64-unknown-cygwin
checking host system type... x86_64-unknown-cygwin
checking for gcc... C:\PROGRA~1\HASKEL~1\802E01~1.1\mingw\bin\gcc.exe
checking whether the C compiler works... no
configure: error: in `/tmp/cabal-tmp-5596/network-2.6.2.1':
configure: error: C compiler cannot create executables
See `config.log' for more details
cabal: Leaving directory 'C:\cygwin64\tmp\cabal-tmp-5596\network-2.6.2.1'
Failed to install network-2.6.2.1

我也尝试过:http://neilmitchell.blogspot.nl/2010/12/installing-haskell-network-library-on.html,它在 GHC 6.12.3 和 7.0.1 上进行了测试(而不是在新的 8.0.1 版本上)。 不幸的是,我得到了错误:

getEnv: invalid argument (The operation completed successfully.)

为了完整起见,我的阴谋集团版本:

$ cabal -V
cabal-install version 1.24.0.0
compiled using version 1.24.0.0 of the Cabal library

安装网络和 MissingH 缺少什么?

【问题讨论】:

  • stack 将组件安装到 ~/.stack/snapshots/... 这不是 cabal 寻找东西的地方。也许您最好为您的工作创建一个 .cabal 文件并使用堆栈来构建它。教程可用here

标签: haskell networking


【解决方案1】:

Stack 对您的设置做了一些假设,值得注意的是:

  • ...它是系统上唯一一个管理软件包的人
  • ...它是系统上唯一一个管理 ghc 的人
  • ...它是系统上唯一一个管理阴谋集团
  • ...每个项目都被沙盒化了
  • ...您宁愿拥有稳定性和可预测性,而不是所有东西的最新版本

您可以将堆栈与“普通”工具一起使用,但只能在不同的项目中使用并且如果您真的很小心的话。诸如不同版本的 cabal-install 之类的东西仍然会出错。同时,它保持自己的数据分离,因此通过堆栈安装任何东西对阴谋集团都是不可见的。因此你有两个选择:要么让你的项目完全购买堆栈,要么完全放弃它。

如果您想使用它,只需将 MissingH 添加到您的 .cabal 文件并重新构建,一切都会好起来的。如果确实弹出错误,最简单的解决方案是清除本地 cabal 存储库并重试。如果这不起作用,请清除整个平台并让堆栈自行重新安装所有内容,然后重试。斯塔克是一个挑剔的女主角,但一旦她上台,她就会经营它。提示:如果您喜欢 cabal 界面但选择使用堆栈,您可以随时运行 stack exec -- cabal install MissingH 之类的东西。

另一种选择是完全放弃堆栈。卸载它并单独使用 cabal,可能与沙盒一起使用。这仍然给您留下了最初的问题 - 看起来像缺少您必须单独安装的本机库。我不知道在这种特定情况下是哪一个,但我可以给你一些提示,看看哪里。如果您没有找到有关它的文档,您可以查看堆栈文件。 (毕竟他们成功了)但最简单的选择是只查看 cygwin 安装了哪些网络库,并让它也安装它们的 -dev 版本。他们几乎总是正确的。

【讨论】:

    【解决方案2】:

    问题好像是这样的

    配置:错误:在`/tmp/cabal-tmp-6136/network-2.6.2.1'中:

    配置:错误:C 编译器无法创建可执行文件

    要么您没有安装 C 编译器,要么它太旧了。 我们实际上不再支持 Cygwin,尝试安装 msys2(实际上平台现在不附带这个吗?)并通过它进行编译。

    您还必须安装 C 编译器 pacman -S mingw-w64-$(uname -m)-gcc 应该这样做。我认为 ./configure 脚本将无法检测到 GHC 的就地 GCC。不确定,因为我有一段时间没有使用平台了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多