如何在Windows上为Haskell开发设置Gtk?
到目前为止,我已经从https://www.haskell.org/platform/windows.html安装完整版本
最初,pacman没有工作,所以我以管理员mingw64.exe的身份运行
C:Program FilesHaskell Platform8.2.1msys
我更新了运行pacman -Syu的msys2系统并安装了所有的Gtk库。 我正在尝试使用堆栈编译https://github.com/mmsbrggr/hsudoku。 我已经超过了错过的DLL错误,现在我得到以下内容:
haskell-gi-base-0.20.4:configure
- 使用以下命令构建包时haskell-gi-base-0.20.4:C: sr setup-exe-cache x86_64-windows Cabal-simple_Z6RU0evB_1.24.2.0_ghc-8.0.2.exe --builddir = .stack -work dist ca59d0ab configure --with-ghc = C: Users Jacek AppData Local Programs stack x86_64-windows ghc-8.0.2 bin ghc.EXE --with-ghc-pkg = C: Users Jacek AppData Local Programs stack x86_64-windows ghc-8.0.2 bin ghc-pkg.EXE --user --package-db = clear --package-db = global --package-db = C: sr snapshots 7eb65607 pkgdb --libdir = C: sr snapshots 7eb65607 lib --bindir = C: sr snapshots 7eb65607 bin --datadir = C: sr snapshots 7eb65607 share --libexecdir = C: sr snapshots 7eb65607 libexec --sysconfdir = C: sr snapshots 7eb65607 etc --docdir = C: sr snapshots 7eb65607 doc haskell-gi-base-0.20.4 --htmldir = C: sr snapshots 7eb65607 doc haskell-gi-base-0.20.4 --haddockdir = C: sr snapshots 7eb65607 doc haskell -gi-base-0.20.4 --dependency = base = base-4.9.1.0 --dependency = bytestring = bytestring-0.10.8.1 --dependency = containers = containers-0.5.7.1 --dependency = text = text -1.2.2.2-9UQZjEJZQFSGMffj1Z5g00“--extra-include-dirs = C: Program Files Haskell Platform 8.2.1 msys mingw64 include”“--extra-include-dirs = C: Program Files Haskell Platform 8.2.1 msys mingw64 include GLIB-2.0“--extra-include-dirs = C: Users Jacek AppData Local Programs stack x86_64-windows msys2-20150512 mingw64 include --extra-include-dirs = C: Users Jacek Downloads glib-2.54.1“--extra-lib-dirs = C: Program Files Haskell Platform 8.2.1 msys mingw64 bin” “--extra-lib-dirs = C: Program Files Haskell Platform 8.2.1 msys usr bin”--extra-lib-dirs = C: Users Jacek AppData Local Programs stack x86_64-windows msys2-20150512 mingw64 bin --extra-lib-dirs = C: Users Jacek AppData Local Programs stack x86_64-windows msys2-20150512 mingw64 lib用代码退出进程:ExitFailure 1已将日志写入:C: Users Jacek Documents ExperimentingHaskell hsudoku.stack-work logs haskell-gi-base-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.
我能找到包含,但我担心一些编译器选项用引号括起来。 这可能是一个问题吗?
在Windows上使用Haskell和Gtk进行开发时,如何正确添加开发文件? 我如何告诉Haskell编译器它可以在哪里找到包含?
extra-include-dirs:['C: Program Files Haskell Platform 8.2.1 msys mingw64 include','C: Users Jacek Downloads glib-2.54.1','C: Program Files Haskell Platform 8.2.1 msys mingw64 include GLIB-2.0'] extra-lib-dirs:['C: Program Files Haskell Platform 8.2.1 msys mingw64 bin','C : Program Files Haskell Platform 8.2.1 msys usr bin']
我的extra-include dirs似乎在编译器输出中出现乱码。
我能够使用Haskell工具堆栈( stack
版本1.6.3)在64位Windows(版本10.0.16299.125)上的haskell-gi
存储库中构建并运行示例'Hello World'程序,如下所示:
stack
先前已被设置为使用GHC 8.0.2或GHC 8.2.2。
我遵循64位Windows的MSYS2安装程序的说明,接受默认设置并更新(如说明中所述)。
打开MSYS2 shell,然后我使用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环境变量(通过在Windows 10搜索栏中输入'env'查找'编辑帐户的编辑环境变量'):
PKG_CONFIG_PATH=C:msys64mingw64libpkgconfig
XDG_DATA_DIRS=C:msys64mingw64share
步骤3和步骤4基于haskell-gi
wiki上的页面。
我在我的帐户的PATH
环境变量的开始附近添加了C:msys64mingw64bin
。 请参阅下面的第7步,了解路径中第一个发现的重要性。
我用一个simple
模板创建了一个新的Haskell项目gi-gtk-test
,然后使用下面的代码移动到它的文件夹中:
stack new gi-gtk-test simple
cd gi-gtk-test
在撰写本文时,使用resolver: lts-10.1
stack.yaml
resolver: lts-10.1
(GHC 8.2.2)创建了一个stack.yaml
文件。 GHC 8.2.2中的一个错误意味着它不能与gi-gtk
一起工作,所以我将其更改为resolver: lts-9.21
以恢复为GHC 8.0.2。
这被证明是一个至关重要的步骤:使用stack exec where -- pkg-config
和stack exec where -- zlib1.dll
可以查看在stack
环境中设置的PATH
上遇到的最新版本,我确保首先遇到的版本是C:msys64mingw64bin
(通过更改我的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
毕竟,我设法编译并启动了使用Gtk库编写的示例Haskell程序。
这个要点是所采取步骤的记录。
https://gist.github.com/bigos/62defeec09a06f18ee38daf644af5340
链接地址: http://www.djcxy.com/p/75481.html上一篇: How do I set up Gtk on Windows for Haskell development?
下一篇: Unable to use f2py to link large PETSc/SLEPc Fortran code