NixOS,Haskell,opengl:构建和运行openGL程序的问题

sam*_*gey 8 opengl haskell nixos

我在NixOS上遇到GL问题:这个问题似乎已经过时了,但2017年还没有直接的解决方案!

我正在尝试使用该Gloss库构建一个Haskell程序.我已经安装了gloss它所需要的一切nix-shell -p mesa,它似乎是正确构建和istalled(使用cabal install).但是,如果我在同一个程序中构建程序nix-shell它不起作用:

$ nix-shell -p mesa_glu

[nix-shell:]$ ghc --make -O2 SnakePar.hs
Linking SnakePar ...

[nix-shell:]$ ./SnakePar 
SnakePar: user error (unknown GLUT entry glutInit)
Run Code Online (Sandbox Code Playgroud)

nix-shell链接阶段之外工作时会发生错误:

$ ghc --make -O2 SnakePar.hs
[1 of 1] Compiling Main             ( SnakePar.hs, SnakePar.o )
Linking SnakePar ...
/nix/store/<hash>-binutils-2.27/bin/ld: cannot find -lGLU
/nix/store/<hash>-binutils-2.27/bin/ld: cannot find -lGL
collect2: error: ld returned 1 exit status
`cc' failed in phase `Linker'. (Exit code: 1)
Run Code Online (Sandbox Code Playgroud)

即使我通过手动安装glu库,也会发生这种情况nix-env -iA.

$ nix-env -q
cabal-install-1.24.0.0
ghc-8.0.1
glu-9.0.0
Run Code Online (Sandbox Code Playgroud)

我尝试使用freeglutmesa以相同的方式,但这些(或甚至所有在一起)都不起作用.

我错过了什么?

这个问题是相关的,但它没有帮助:nixos + haskell + opengl(先决条件)

解决方案:切换到堆栈后一切正常.

Soh*_*ury 5

刚刚解决了这个问题,经过三天,好吧,又是一个不开心的Arch-user-直到最后一周:尝试添加freeglutnix-shell环境中,即使用nix-shell -p mesa freeglut.

对于stack绊倒此答案的用户,请将其添加到~/.stack/stack.yaml:

nix:
  enable: true
  packages: [mesa freeglut]
Run Code Online (Sandbox Code Playgroud)

nix-shell解决方案不会在这种情况下工作-这个问题,因为我猜,是堆栈始终有效,即使从内部运行一个纯粹的环境中nix-shell.我确实试过pure: falsenix一段stack.yaml,但那没用.这样做,现在.

  • mesa需要提供C头OpenGLRaw和其他库(这就是为什么链接在你的情况下失败,我相信).
  • freeglut 提供运行时所需的GLUT绑定(否则会得到"未知GLUT条目"错误).

您可能需要将其更改mesa为其他内容,例如mesa_glu.

  • 知道为什么`nix-shell -p mesa mesa_glu freeglut`不起作用? (2认同)