我正在尝试运行以下示例: https://raw.githubusercontent.com/elisehuard/game-in-haskell/master/src/Shapes.hs
但是我收到错误消息“ freeglut ERROR:在未先调用'glutInit'的情况下调用了函数。”
我设法将问题隔离到第39行:“颜色(洋红色)$翻译0(-100)$标度0.2 0.2 $文本“嘘!””
当我将其更改为:“颜色(洋红色)$翻译0(-100)$比例0.2 0.2 $空白
一切正常。
我正在研究Linux Mint 19;光泽度版本1.13.0.1;光泽渲染1.13.0.2。
克隆光泽后,构建并将新克隆的库添加到我的堆栈中
malki@Hood:~/Projects/TstP$ stack build
TstP-0.1.0.0: build (lib + exe)
gloss-1.13.0.1: build (lib)
Completed 2 action(s).
Log files have been written to: /home/malki/Projects/TstP/.stack-work/logs/
-- While building package TstP-0.1.0.0 using:
/home/malki/.stack/setup-exe-cache/x86_64-linux/Cabal-simple_mPHDZzAJ_2.2.0.1_ghc-8.4.4 --builddir=.stack-work/dist/x86_64-linux/Cabal-2.2.0.1 build lib:TstP exe:TstP-exe --ghc-options " -ddump-hi -ddump-to-file"
Process exited with code: ExitFailure 1
Logs have been written to: /home/malki/Projects/TstP/.stack-work/logs/TstP-0.1.0.0.log
Preprocessing library for TstP-0.1.0.0..
Building library for TstP-0.1.0.0..
Preprocessing executable 'TstP-exe' for TstP-0.1.0.0..
Building executable 'TstP-exe' for TstP-0.1.0.0..
[1 of 2] Compiling Main ( app/Main.hs, .stack-work/dist/x86_64-linux/Cabal-2.2.0.1/build/TstP-exe/TstP-exe-tmp/Main.o )
/home/malki/Projects/TstP/app/Main.hs:5:1: error:
Could not find module ‘Graphics.UI.GLFW’
It is not a module in the current program, or in any known package.
|
5 | import "GLFW-b" Graphics.UI.GLFW as GLFW
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/home/malki/Projects/TstP/app/Main.hs:6:1: error:
Could not find module ‘Graphics.Gloss’
Use -v to see a list of the files searched for.
|
6 | import Graphics.Gloss
| ^^^^^^^^^^^^^^^^^^^^^
/home/malki/Projects/TstP/app/Main.hs:7:1: error:
Could not find module ‘Graphics.Gloss.Rendering’
Use -v to see a list of the files searched for.
|
7 | import Graphics.Gloss.Rendering
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/home/malki/Projects/TstP/app/Main.hs:8:1: error:
Could not find module ‘Graphics.Gloss.Data.Color’
Use -v to see a list of the files searched for.
|
8 | import Graphics.Gloss.Data.Color
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/home/malki/Projects/TstP/app/Main.hs:9:1: error:
Could not find module ‘Graphics.Gloss.Data.Picture’
Use -v to see a list of the files searched for.
|
9 | import Graphics.Gloss.Data.Picture
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- While building package gloss-1.13.0.1 using:
/home/malki/.stack/setup-exe-cache/x86_64-linux/Cabal-simple_mPHDZzAJ_2.2.0.1_ghc-8.4.4 --builddir=.stack-work/dist/x86_64-linux/Cabal-2.2.0.1 build lib:gloss --ghc-options " -ddump-hi -ddump-to-file"
Process exited with code: ExitFailure 1
Logs have been written to: /home/malki/Projects/TstP/.stack-work/logs/gloss-1.13.0.1.log
Preprocessing library for gloss-1.13.0.1..
Building library for gloss-1.13.0.1..
[ 1 of 44] Compiling Graphics.Gloss.Data.Bitmap ( Graphics/Gloss/Data/Bitmap.hs, .stack-work/dist/x86_64-linux/Cabal-2.2.0.1/build/Graphics/Gloss/Data/Bitmap.o ) [Graphics.Gloss.Rendering changed]
/home/malki/Projects/TstP/gloss/gloss/Graphics/Gloss/Data/Bitmap.hs:15:1: error:
Could not find module ‘Graphics.Gloss.Rendering’
There are files missing in the ‘gloss-rendering-1.13.0.2’ package,
try running 'ghc-pkg check'.
Use -v to see a list of the files searched for.
|
15 | import Graphics.Gloss.Rendering
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
malki@Hood:~/Projects/TstP$
这些模块作为全局模块存在(事物在此堆栈目录之外编译)。但是它们不在光泽克隆中。
malki@Hood:~/Projects/TstP/gloss/gloss$ find ./Graphics
./Graphics
./Graphics/Gloss
./Graphics/Gloss/Geometry
./Graphics/Gloss/Geometry/Angle.hs
./Graphics/Gloss/Geometry/Line.hs
./Graphics/Gloss/Geometry.hs
./Graphics/Gloss/Interface
./Graphics/Gloss/Interface/Pure
./Graphics/Gloss/Interface/Pure/Simulate.hs
./Graphics/Gloss/Interface/Pure/Animate.hs
./Graphics/Gloss/Interface/Pure/Game.hs
./Graphics/Gloss/Interface/Pure/Display.hs
./Graphics/Gloss/Interface/IO
./Graphics/Gloss/Interface/IO/Simulate.hs
./Graphics/Gloss/Interface/IO/Animate.hs
./Graphics/Gloss/Interface/IO/Interact.hs
./Graphics/Gloss/Interface/IO/Game.hs
./Graphics/Gloss/Interface/IO/Display.hs
./Graphics/Gloss/Interface/Environment.hs
./Graphics/Gloss/Data
./Graphics/Gloss/Data/Vector.hs
./Graphics/Gloss/Data/Point.hs
./Graphics/Gloss/Data/ViewState.hs
./Graphics/Gloss/Data/ViewPort.hs
./Graphics/Gloss/Data/Color.hs
./Graphics/Gloss/Data/Point
./Graphics/Gloss/Data/Point/Arithmetic.hs
./Graphics/Gloss/Data/Bitmap.hs
./Graphics/Gloss/Data/Controller.hs
./Graphics/Gloss/Data/Picture.hs
./Graphics/Gloss/Data/Display.hs
./Graphics/Gloss/Internals
./Graphics/Gloss/Internals/Color.hs
./Graphics/Gloss/Internals/Interface
./Graphics/Gloss/Internals/Interface/Common
./Graphics/Gloss/Internals/Interface/Common/Exit.hs
./Graphics/Gloss/Internals/Interface/Event.hs
./Graphics/Gloss/Internals/Interface/ViewState
./Graphics/Gloss/Internals/Interface/ViewState/KeyMouse.hs
./Graphics/Gloss/Internals/Interface/ViewState/Motion.hs
./Graphics/Gloss/Internals/Interface/ViewState/Reshape.hs
./Graphics/Gloss/Internals/Interface/Simulate
./Graphics/Gloss/Internals/Interface/Simulate/Idle.hs
./Graphics/Gloss/Internals/Interface/Simulate/State.hs
./Graphics/Gloss/Internals/Interface/Simulate.hs
./Graphics/Gloss/Internals/Interface/Backend
./Graphics/Gloss/Internals/Interface/Backend/GLFW.hs
./Graphics/Gloss/Internals/Interface/Backend/GLUT.hs
./Graphics/Gloss/Internals/Interface/Backend/Types.hs
./Graphics/Gloss/Internals/Interface/Backend.hs
./Graphics/Gloss/Internals/Interface/Animate.hs
./Graphics/Gloss/Internals/Interface/Callback.hs
./Graphics/Gloss/Internals/Interface/Interact.hs
./Graphics/Gloss/Internals/Interface/Animate
./Graphics/Gloss/Internals/Interface/Animate/Timing.hs
./Graphics/Gloss/Internals/Interface/Animate/State.hs
./Graphics/Gloss/Internals/Interface/Debug.hs
./Graphics/Gloss/Internals/Interface/Game.hs
./Graphics/Gloss/Internals/Interface/Window.hs
./Graphics/Gloss/Internals/Interface/Display.hs
./Graphics/Gloss.hs
malki@Hood:~/Projects/TstP/gloss/gloss$
本地Graphic分支不是应该遮盖现有分支吗?似乎它试图完全替换它。
请指教!
干杯!
答案 0 :(得分:2)
使用GLFW 或 GLUT将光泽编译为或者运行-参见Backend.hs
:
#ifdef WITHGLUT
defaultBackendState :: GLUTState
#elif WITHGLFW
defaultBackendState :: GLFWState
#else
#error No default backend defined
#endif
WITHGLUT
和WITHGLFW
是构建软件包时指定的编译时标志。您尝试手动运行的代码设置了一个GLFW窗口,然后使用了光泽来渲染事物:看起来您正在使用的光泽被编译为使用GLUT而不是GLFW,因此手动完成的设置不是足够。
您需要重新编译光泽才能使用GLFW:
git clone https://github.com/benl23x5/gloss
cd gloss
stack build --flag gloss:glfw --flag gloss:-glut
您可能需要调整构建文件以修复构建期间的错误:堆栈非常擅长于说明您需要修复的内容。我必须:
GLFW-b-1.4.8.4@sha256:2d10594c5cfa9d5178596eb6a18106a1318409e47a4108bfe91b89d80684638e
添加到extra-deps
的{{1}} stack.yaml
中的Graphics.Gloss.Internals.Interface.Backend.GLUT
中添加Other-modules
。然后,您可以修改要运行的示例的构建文件,以使gloss.cabal
使用程序包as described here的本地版本。