Haskell: ошибка при попытке отобразить текст - PullRequest
0 голосов
/ 08 декабря 2018

Я пытаюсь запустить этот пример: https://raw.githubusercontent.com/elisehuard/game-in-haskell/master/src/Shapes.hs

Но я получаю ошибку "ОШИБКА freeglut: Функция вызвана без предварительного вызова glutInit".

Мне удалось выделить проблему в строке 39: "Цвет (ярко-пурпурный) $ translate 0 (-100) $ scale 0.2 0.2 $ text" Boo! ""

при измененииto: "Цвет (ярко-пурпурный) $ translate 0 (-100) $ scale 0,2 0,2 ​​$ blank

Работает нормально.

Я работаю над linux mint 19; Глянцевая версия 1.13.0.1; gloss-рендеринг 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$ 

Разве местная графическая ветвь не должна затенять существующую?Кажется, он пытается заменить его полностью.


Пожалуйста, сообщите!

Ура!

1 Ответ

0 голосов
/ 08 декабря 2018

Gloss компилируется для запуска либо с 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 из stack.yaml
  • Добавить Graphics.Gloss.Internals.Interface.Backend.GLUT к Other-modules в gloss.cabal.

Затем вы можете изменить файлы сборки для примера, который вы пытаетесь запустить, чтобы stack использовал вашу локальную версию пакета , как описано здесь .

...