如何在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-configstack exec where -- zlib1.dll可以查看在stack环境中设置的PATH上遇到的最新版本,我确保首先遇到的版本是C:msys64mingw64bin (通过更改我的PATH上的文件夹顺序或将不需要的zlib1.dll重命名为zlib1.dll.old )。 (我认为前者的其他版本导致了有关'缺少C库'的错误消息,后者的其他版本导致出现关于dll的模糊消息的对话框。)

  • 我将这些软件包gi-gtkhaskell-gi-basegi-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