我已经阅读了NixOS, Haskell, opengl : problems with building and running openGL programs和所有其他相应的问题,但我不能让一个简单的Haskell gloss项目(几个月前可以工作)工作。
使用github项目
尝试以下操作:
$ git clone https://www.github.com/turion/rhine
$ cd rhine/
$ cd rhine-gloss/
$ stack build
$ stack exec rhine-gloss-gears
freeglut (rhine-gloss-gears): ERROR: Internal error <FBConfig with necessary capabilities not found> in function fgOpenWindow此项目使用this answer中解释的堆栈nix集成,但由于mesa最近已被重命名,stack.yaml中的相关部分现在为:
nix:
enable: true
packages: [libGL libGLU freeglut]从头开始
确保你已经安装了cabal,stack和nix。然后执行以下命令:
$ mkdir tempgloss
$ cd tempgloss使用以下内容创建两个文件:
$ cat Main.hs
import Graphics.Gloss
main = display (InWindow "Nice Window" (200, 200) (10, 10)) white (Circle 80)
$ cat stack.yaml
resolver: lts-12.10
nix:
enable: true
packages: [libGL libGLU freeglut]现在执行:
$ cabal init --is-executable -n --main-is=Main.hs -d gloss -d base -l MIT
[...]
$ stack build
[...]
$ stack exec tempgloss 这是怎么回事?
发布于 2018-09-27 21:59:15
(此解决方案已弃用,取而代之的是我的其他使用nixGL的解决方案)
问题是stack正在覆盖您的nixos安装的LD_LIBRARY_PATH。缺省情况下,它包含诸如/run/opengl-driver/lib:/run/opengl-driver-32/lib之类的内容,并被堆栈用堆栈提供的库的路径覆盖,对我来说,它包含:/nix/store/v1d3fmjjqzd1wh84w8dmy4i3hxzgaybf-libGL-1.0.0/lib:/nix/store/y9s4bbn6j54flhpggccrmjd7cv3nkw60-glu-9.0.0/lib:/nix/store/jx7018a4yvd0x79qwp8ad15h5isy1ny3-freeglut-3.0.0/lib:/nix/store/5z8gx1bjw5s0q96n191k0a8caqr4r580-ghc-8.4.3/lib:/nix/store/yypprmw8hrmvwyhhz23w8z25yjvdhnxb-git-2.18.0/lib:/nix/store/iw94llkj05wgaz268mlzvgx8jkbi1ss0-gcc-wrapper-7.3.0/lib:/nix/store/rxaclc3vhxbzgfllv7601i85z854h48a-gmp-6.1.2/lib
我没有一个简单的解决方案,这实际上是痛苦的堆栈不改变你的二进制文件的rpath,而是覆盖LD_LIBRARY_PATH。
我的快速和肮脏的解决方案:
LD_LIBRARY_PATH:stack exec -- env | grep LD_LIBRARY_PATH LD_LIBRARY_PATH=/nix/store/v1d3fmjjqzd1wh84w8dmy4i3hxzgaybf-libGL-1.0.0/lib:/nix/store/y9s4bbn6j54flhpggccrmjd7cv3nkw60-glu-9.0.0/lib:/nix/store/jx7018a4yvd0x79qwp8ad15h5isy1ny3-freeglut-3.0.0/lib:/nix/store/5z8gx1bjw5s0q96n191k0a8caqr4r580-ghc-8.4.3/lib:/nix/store/yypprmw8hrmvwyhhz23w8z25yjvdhnxb-git-2.18.0/lib:/nix/store/iw94llkj05wgaz268mlzvgx8jkbi1ss0-gcc-wrapper-7.3.0/lib:/nix/store/rxaclc3vhxbzgfllv7601i85z854h48a-gmp-6.1.2/lib
LD_LIBRARY_PATH$ echo $LD_LIBRARY_PATH /run/opengl-driver/lib:/run/opengl-driver-32/lib
的实际路径
$ stack exec --no-nix-pure which rhine-gloss-gears /tmp/rhine/rhine-gloss/.stack-work/install/x86_64-linux-nix/nightly-2018-09-26/8.4.3/bin/rhine-gloss-gears
在这里,--no-nix-pure允许stack查看在您的当前环境中应该可用的which。
d)将所有这些连接起来,使用:
LD_LIBRARY_PATH=yourLD_LIBRARY_PATH:theOneFromStack the_executable_path
例如:
LD_LIBRARY_PATH=/run/opengl-driver/lib:/run/opengl-driver-32/lib:/nix/store/v1d3fmjjqzd1wh84w8dmy4i3hxzgaybf-libGL-1.0.0/lib:/nix/store/y9s4bbn6j54flhpggccrmjd7cv3nkw60-glu-9.0.0/lib:/nix/store/jx7018a4yvd0x79qwp8ad15h5isy1ny3-freeglut-3.0.0/lib:/nix/store/5z8gx1bjw5s0q96n191k0a8caqr4r580-ghc-8.4.3/lib:/nix/store/yypprmw8hrmvwyhhz23w8z25yjvdhnxb-git-2.18.0/lib:/nix/store/iw94llkj05wgaz268mlzvgx8jkbi1ss0-gcc-wrapper-7.3.0/lib:/nix/store/rxaclc3vhxbzgfllv7601i85z854h48a-gmp-6.1.2/lib /tmp/rhine/rhine-gloss/.stack-work/install/x86_64-linux-nix/nightly-2018-09-26/8.4.3/bin/rhine-gloss-gears
发布于 2018-09-27 22:09:09
我刚刚推出了一个新版本的nixGL:http://github.com/guibou/nixgl`,它允许你这样运行你的程序:
stack exec --no-nix-pure nixGLIntel rhine-gloss-gears
(如果需要,将nixGLIntel替换为nixGLNvidia或nixGLNvidiaBumblebee )。
https://stackoverflow.com/questions/52534037
复制相似问题