Как настроить 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 ответа:
Я смог построить и запустить пример программы "Hello World" в
haskell-gi
репозиторий на 64-разрядной Windows (версия 10.0.16299.125) с использованием стека инструментов Haskell (stack
, версия 1.6.3) следующим образом:
stack
ранее была настроена на использование GHC 8.0.2 или GHC 8.2.2.Я следовал инструкциям для установщика MSYS2 для 64-разрядной Windows, принимая значения по умолчанию и обновления (как указано в инструкции).
Открыв оболочку 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. (Однако я не могу исключить, что я мог установить другие пакеты.)Я настроил следующие переменные среды 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 .Я добавил
C:\msys64\mingw64\bin
рядом с началом переменной окруженияPATH
для моей учетной записи. Смотрите Шаг 7 ниже о важности того, что находится первым на пути.Я создал новый проект 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.Это оказалось жизненно важным шагом: используя
stack exec where -- pkg-config
иstack exec where -- zlib1.dll
, чтобы увидеть, какие версии были впервые обнаружены вPATH
, настроенном в средеstack
, я убедился, что версии, которые были обнаружены вC:\msys64\mingw64\bin\
(изменив порядок папок на моемPATH
или переименовав ненужныеzlib1.dll
какzlib1.dll.old
). (Я думаю, что другие версии первой приводили к сообщениям об ошибках о "отсутствующих библиотеках C". а другие версии последних приводили к появлению диалоговых окон с непонятными сообщениями о библиотеках DLL.)Я добавил пакеты
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
Я изменил содержание
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
Затем, как и ожидалось, для построения и запуска примера программы сработало следующее:
stack build stack exec gi-gtk-test
В конце концов, мне удалось скомпилировать и запустить пример программы Haskell, написанной с использованием библиотеки Gtk.
Эта суть-запись предпринятых шагов.
Https://gist.github.com/bigos/62defeec09a06f18ee38daf644af5340