到目前为止,我已经安装了https://www.haskell.org/platform/windows.html
的完整版本最初,pacman没有工作,所以我确实以
中的管理员mingw64.exe运行C:\Program Files\Haskell Platform\8.2.1\msys
我更新了运行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:\用户\亚切克\应用程序数据\本地\程序\栈\ x86_64的窗口\ GHC-8.0.2 \ BIN \ ghc.EXE --with-GHC-PKG = C:\用户\亚切克\应用程序数据\本地\程序\堆\ x86_64的窗口\ 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 平台\ 8.2.1 \ MSYS \ mingw64 \包括" " - extra-include-dirs = C:\ Program Files \ Haskell 平台\ 8.2.1 \ MSYS \ mingw64 \包括\ GLIB-2.0" --extra-包括-显示目录= C:\用户\亚切克\应用程序数据\本地\程序\堆\ x86_64的窗口\ msys2-20150512 \ mingw64 \包括 --extra-include-dirs = C:\ Users \ Jacek \ Downloads \ glib-2.54.1" - extra-lib-dirs = C:\ Program Files \ Haskell 平台\ 8.2.1 \ MSYS \ mingw64 \ BIN" " - 额外-LIB-显示目录= C:\程序 Files \ Haskell Platform \ 8.2.1 \ msys \ usr \ bin" --extra-LIB-显示目录= C:\用户\亚切克\应用程序数据\本地\程序\堆\ x86_64的窗口\ msys2-20150512 \ mingw64 \仓 --extra-LIB-显示目录= C:\用户\亚切克\应用程序数据\本地\程序\堆\ x86_64的窗口\ 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 平台\ 8.2.1 \ MSYS \ mingw64 \包括&#39 ;, ' 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']
我的额外包含dirs在编译器输出中似乎是乱码。
答案 0 :(得分:2)
我能够构建并运行示例' Hello World'使用haskell-gi
repository(stack
,版本1.6.3)在64位Windows(版本10.0.16299.125)上的Haskell Tool Stack上编程,如下所示:
stack
之前已经设置为使用GHC 8.0.2或GHC 8.2.2。
我按照64位Windows MSYS2 installer的说明,接受默认值和更新(如说明中所述)。
打开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:\msys64\mingw64\lib\pkgconfig
XDG_DATA_DIRS=C:\msys64\mingw64\share
步骤3和4基于page on the haskell-gi
wiki。
我在帐户的C:\msys64\mingw64\bin
环境变量的开头附近添加了PATH
。请参阅下面的步骤7,了解在路径上首先发现的内容的重要性。
我使用gi-gtk-test
模板创建了一个新的Haskell项目simple
,然后使用以下命令移动到其文件夹中:
stack new gi-gtk-test simple
cd gi-gtk-test
在撰写本文时,创建了一个stack.yaml
文件resolver: lts-10.1
(GHC 8.2.2)。 bug in 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
答案 1 :(得分:0)
毕竟,我已经设法编译并启动了使用Gtk库编写的示例Haskell程序。
这个要点是所采取措施的记录。
https://gist.github.com/bigos/62defeec09a06f18ee38daf644af5340