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)
我尝试使用freeglut
或mesa
以相同的方式,但这些(或甚至所有在一起)都不起作用.
我错过了什么?
这个问题是相关的,但它没有帮助:nixos + haskell + opengl(先决条件)
解决方案:切换到堆栈后一切正常.
我刚刚解决了这个问题,经过三天,好吧,又是一个不开心的Arch-user-直到最后一周:尝试添加freeglut
到nix-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: false
了nix
一段stack.yaml
,但那没用.这样做,现在.
mesa
需要提供C头OpenGLRaw
和其他库(这就是为什么链接在你的情况下失败,我相信).freeglut
提供运行时所需的GLUT绑定(否则会得到"未知GLUT条目"错误).您可能需要将其更改mesa
为其他内容,例如mesa_glu
.