Как настроить Gtk в Windows для разработки Haskell?


Пока я установил полную версию из https://www.haskell.org/platform/windows.html

Изначально pacman не работал, поэтому я работал как администратор mingw64.exe найдено в

C:Program FilesHaskell Platform8.2.1msys

Я обновил msys2 sytem под управлением pacman-Syu и установил все библиотеки Gtk. Я пытаюсь скомпилировать https://github.com/mmsbrggr/hsudoku использование стека. Я прошел мимо отсутствующих ошибок dll, и теперь я получаю следующее:

Haskell-gi-base-0.20.4: configure

-- при сборке пакета haskell-gi-base-0.20.4 с использованием: C:srsetup-exe-cachex86_64-windowsCabal-simple_Z6RU0evB_1.24.2.0_ghc-8.0.2.exe -- builddir=.стек-работаНca59d0ab настроить с помощью GHC=С:ПользователиЯцекпапка AppDataместныепрограммыстекархитектуру x86_64-окнас GHC-8.0.2бинс GHC.EXE --с-с GHC-pkg В=С:ПользователиЯцекпапка AppDataместныепрограммыстекархитектуру x86_64-окнас GHC-8.0.2бинс GHC-pkg в.EXE --пользователь-пакет-дБ=ясно-пакет-дБ=глобальный --package-db=C:srsnapshots7eb65607pkgdb --libdir=C:srsnapshots7eb65607lib --bindir=C:srsnapshots7eb65607bin --datadir=C:srsnapshots7eb65607share --libexecdir=C:srsnapshots7eb65607libexec --sysconfdir=C:srsnapshots7eb65607etc --docdir=c:SRsnapshots7eb65607docHaskell-GI-Base-0.20.4 --htmldir=c:SRSnapshots7eb65607docHaskell-GI-Base-0.20.4 --haddockdir=c:SRSnapshots7eb65607docHaskell-GI-Base-0.20.4 --Dependency=base=base-4.9.1.0 --зависимость=bytestring=bytestring-0.10.8.1 --зависимость=тара=тара-0.5.7.1 --зависимость=текст=текст-1.2.2.2-9UQZjEJZQFSGMffj1Z5g00 "--очень включить-Дирс=с:программные файлыХаскелл Платформа8.2.1msysmingw64 include" "--extra-include-dirs=C:Program FilesHaskell Платформа8.2.1msysmingw64includeGLIB-2.0" --extra-include-dirs=C:UsersJacekAppDataLocalProgramsstackx86_64-windowsmsys2-20150512mingw64include --дополнительные-включить-Дирс=С:ПользователиЯцекзагрузкиГлеб-2.54.1 "--extra-lib-dirs=C:Program FilesHaskell Платформа8.2.1msysmingw64bin "" --extra-lib-dirs=C: Program Файлыплатформа Haskell8.2.1msysusrbin" --extra-lib-dirs=C:UsersJacekAppDataLocalProgramsstackx86_64-windowsmsys2-20150512mingw64bin --extra-lib-dirs=C:UsersJacekAppDataLocalProgramsstackx86_64-windowsmsys2-20150512mingw64lib Процесс вышел с кодом: ExitFailure 1 Журналы были записаны в: C:UsersJacekDocumentsExperimentingHaskellhsudoku.стек-работажурналыХаскелл-деньги-база-0.20.4.log

Configuring haskell-gi-base-0.20.4...
Cabal-simple_Z6RU0evB_1.24.2.0_ghc-8.0.2.exe: Missing dependencies on foreign
libraries:
* Missing C libraries: gobject-2.0, glib-2.0, intl
This problem can usually be solved by installing the system packages that
provide these libraries (you may need the "-dev" versions). If the libraries
are already installed but in a non-standard location then you can use the
flags --extra-include-dirs= and --extra-lib-dirs= to specify where they are.

Я могу найти includes, но меня беспокоит, что некоторые параметры компилятора заключены в кавычки. Может ли это быть проблемой?

Как правильно добавлять файлы разработки при разработке с помощью Haskell и Gtk в Windows? Как я могу сказать компилятору Haskell, где он может найти includes?

Extra-include-dirs: ['C:Program файлыHaskell Платформа8.2.1msysmingw64include', 'C:UsersJacekDownloadsglib-2.54.1','C:Program ФайлыHaskell Платформа8.2.1msysmingw64includeGLIB-2.0'] extra-lib-dirs: ['C:Program FilesHaskell Platform8.2.1msysmingw64bin', 'C:Program FilesHaskell Platform8.2.1msysusrbin']

Мои extra-include dir, похоже, искажены в выводе компилятора.

2 3

2 ответа:

Я смог построить и запустить пример программы "Hello World" в haskell-gi репозиторий на 64-разрядной Windows (версия 10.0.16299.125) с использованием стека инструментов Haskell (stack, версия 1.6.3) следующим образом:

  1. stack ранее была настроена на использование GHC 8.0.2 или GHC 8.2.2.

  2. Я следовал инструкциям для установщика MSYS2 для 64-разрядной Windows, принимая значения по умолчанию и обновления (как указано в инструкции).

  3. Открыв оболочку MSYS2, я затем использовал pacman для установки пакетов mingw64/mingw-w64-x86_64-pkg-config mingw64/mingw-w64-x86_64-gobject-introspection mingw64/mingw-w64-x86_64-gtksourceview3 mingw64/mingw-w64-x86_64-webkitgtk3. Затем я вернулся к командной строке Windows. (Однако я не могу исключить, что я мог установить другие пакеты.)

  4. Я настроил следующие переменные среды Windows для своей учетной записи (находя 'Edit environment variables for your account', набрав 'env' в строке поиска Windows 10):

    PKG_CONFIG_PATH=C:\msys64\mingw64\lib\pkgconfig
    XDG_DATA_DIRS=C:\msys64\mingw64\share
    

    Шаги 3 и 4 были основаны на страница наhaskell-gi wiki .

  5. Я добавил C:\msys64\mingw64\bin рядом с началом переменной окружения PATH для моей учетной записи. Смотрите Шаг 7 ниже о важности того, что находится первым на пути.

  6. Я создал новый проект Haskell gi-gtk-test с шаблоном simple, а затем переместил его в папку, используя:

    stack new gi-gtk-test simple
    cd gi-gtk-test
    

    На момент написания статьи, который создал файл stack.yaml С resolver: lts-10.1 (GHC 8.2.2). Ошибка в GHC 8.2.2 означает, что он не работает с gi-gtk, поэтому я изменил его на resolver: lts-9.21, чтобы вернуться к GHC 8.0.2.

  7. Это оказалось жизненно важным шагом: используя stack exec where -- pkg-config и stack exec where -- zlib1.dll, чтобы увидеть, какие версии были впервые обнаружены в PATH, настроенном в среде stack, я убедился, что версии, которые были обнаружены в C:\msys64\mingw64\bin\ (изменив порядок папок на моем PATH или переименовав ненужные zlib1.dll как zlib1.dll.old). (Я думаю, что другие версии первой приводили к сообщениям об ошибках о "отсутствующих библиотеках C". а другие версии последних приводили к появлению диалоговых окон с непонятными сообщениями о библиотеках DLL.)

  8. Я добавил пакеты gi-gtk и haskell-gi-base в файл gi-gtk-test.cabal следующим образом:

    executable gi-gtk-test
      hs-source-dirs:      src
      main-is:             Main.hs
      default-language:    Haskell2010
      build-depends:       base >= 4.7 && < 5
                         , gi-gtk
                         , haskell-gi-base
    
  9. Я изменил содержание Main.hs, чтобы быть примером программы, а именно:

    {-# LANGUAGE OverloadedStrings, OverloadedLabels #-}
    
    module Main where
    
    import qualified GI.Gtk as Gtk  -- package gi-gtk
    import Data.GI.Base             -- package haskell-gi-base
    
    main :: IO ()
    main = do
      Gtk.init Nothing
      win <- new Gtk.Window [ #title := "Hi there" ]
      on win #destroy Gtk.mainQuit
      button <- new Gtk.Button [ #label := "Click me" ]
      on button #clicked (set button [ #sensitive := False,
                                       #label := "Thanks for clicking me" ])
      #add win button
      #showAll win
      Gtk.main
    
  10. Затем, как и ожидалось, для построения и запуска примера программы сработало следующее:

    stack build
    stack exec gi-gtk-test
    

В конце концов, мне удалось скомпилировать и запустить пример программы Haskell, написанной с использованием библиотеки Gtk.

Эта суть-запись предпринятых шагов.

Https://gist.github.com/bigos/62defeec09a06f18ee38daf644af5340