Windows 7安装gtk2hs+glade的成功经验

    技术2022-05-20  30

    我花费了许多时间在Windows上安装gtk2hs和glade,今天终于成功。

     

    一、参考资料

    1、http://www.haskell.org/haskellwiki/Gtk2Hs

    主要的安装指导。但写得不完整,没有注明成功所用的版本,我遇到的许多的问题也没有说明。

    所以我才特意写了本文,给后来人一个参考,让他们少走弯路。

    2、http://code.haskell.org/gtk2hs/INSTALL

    个人观点,参考价值不大。

    二、所用软件及版本

    1、Haskell Platform for Windows

    HaskellPlatform-2011.2.0.0-setup.exe

    2、make及相关库文件,来自MinGW

    其实不必安装make,只是http://www.haskell.org/haskellwiki/Gtk2Hs 上有讲就满装一下。

    包括三个压缩包文件:

    make-3.82-5-mingw32-bin.tar.lzma

    libiconv-1.13.1-1-mingw32-dll-2.tar.lzma

    libintl-0.17-1-mingw32-dll-8.tar.lzma

    后面两个是make所需的运行库。.lzma格式压缩文件比较少见,用7-Zip或360压缩可以解开。

    3、MSYS(MSYS-1.0.11.exe)

    其实也不用装,就不讲了。

    4、libxml2和libxml2-dev

    来自Gnome

    libxml2_2.7.7-1_win32.zip

    libxml2-dev_2.7.7-1_win32.zip

    5、glade3-3.6.7-with-GTK+.exe

    来自bundled GTK and Glade binary

    http://code.haskell.org/gtk2hs/INSTALL 说安装gtk+-bundle_2.16.6-20100912_win32.zip 。但glade3-3.6.7-with-GTK+.exe带有glade3更方便。

    三、前期安装过程

    1、安装Haskell Platform

    笔者安装在D:/Program Files/Haskell Platform/2011.2.0.0

    安装简单,没遇到任何问题

    2、make及相关运行库

    解压缩

    make-3.82-5-mingw32-bin.tar.lzma

    libiconv-1.13.1-1-mingw32-dll-2.tar.lzma

    libintl-0.17-1-mingw32-dll-8.tar.lzma

    到D:/Program Files/Haskell Platform/2011.2.0.0/mingw/bin

    其中mingw32-make.exe复制成make.exe

    3、MSYS

    不装也行,不讲了

    4、libxml2和libxml2-dev

    解压缩到无空格的路径,例如:D:/prgs/libxml2

    5、glade3-3.6.7-with-GTK+.exe

    同Haskell Platform一样简单。

    6、设置环境变量

    PKG_CONFIG_PATH=D:/prgs/libxml2/lib/pkgconfig;D:/prgs/Gtk+/lib/pkgconfig;D:/Program Files/Haskell Platform/2011.2.0.0/mingw/lib/pkgconfig

    INCLUDE=D:/prgs/libxml2/include;D:/prgs/Gtk+/include;D:/prgs/Gtk+/include/libglade-2.0;D:/Program Files/Haskell Platform/2011.2.0.0/mingw/include

    PATH=D:/prgs/libxml2/bin;D:/prgs/Gtk+/bin;C:/Program Files/Haskell/bin;d:/Program Files/Haskell Platform/2011.2.0.0/lib/extralibs/bin;d:/Program Files/Haskell Platform/2011.2.0.0/bin;D:/Program Files/Haskell Platform/2011.2.0.0/mingw/bin;%PATH%;C:/Users/Administrator/AppData/Roaming/cabal/bin

    路径PATH有些是安装程序时自动设好的。%PATH%表示原来的路径。

    四、gtk2hs-buildtools

    在DOS提示符下运行:

    cabal install gtk2hs-buildtools

    可能会出现一个抱怨,根据提示运行cabal update就行,这一步不会出现什么大问题。

    到现在为止,一切都很顺利,但真正艰难的旅程即将开始......

    五、正式安装gtk2hs

    这一个充满挫折的道路。参考资料只有简单的一句cabal install gtk,但主要问题集中在这一步,这让我想起了自由软件的不人性化。真应该建议Haskell Platform安装包的制作者将gtk2hs(最好也包括glade)作为一个可选项做进安装包!

    1、安装命令应改成:cabal install gtk --global

    注意,命令中是gtk。

    这只针对gtk2hs-0.12.0这一版本。要加上--global;否则,会报关于UserPackageDB的错误:

    setup.exe: internal error: unexpected package db stack: [UserPackageDB] cabal: Error: some packages failed to install:

    单独安装gtk2hs中的软件也要加--global。

    2、安装GIO的出错

    当安装到GIO时会报如下错误:

    System/GIO/Volumes/VolumeMonitor.chs:56:5:     Not in scope: `vmDriveStopButton'

    System/GIO/Volumes/Drive.chs:59:5:     Not in scope: type constructor or class `DriveStartStopType'

    System/GIO/Volumes/Drive.chs:60:5:     Not in scope: type constructor or class `DriveStartFlags' 这是源代码里的一个BUG。

    要解决这个问题,就先要讲一下cabal安装软件。cabal update会建立一个目录C:/Users/Administrator/AppData/Roaming/cabal/packages/hackage.haskell.org。其下有两个文件:00-index.tar和00-index.tar.gz,里面包括可安装的软件包中的.cabal文件。用cabal info <软件包名称>可查看软件包信息。已安装的软件包记录在这个目录的build-reports.log文件里。运行cabal install <软件包名称>会从网上自动下载软件源码包,源码包就存放在这个目录下。例如gio的源码包gio-0.12.0.tar.gz就存放在C:/Users/Administrator/AppData/Roaming/cabal/packages/hackage.haskell.org/gio/0.12.0

    软件安装后就存放在C:/Users/Administrator/AppData/Roaming/cabal下,从名字可以看得出这只是用户Administrator个人软件目录。如果安装时加上--global就存放在C:/Program Files/Haskell,这个目录下的软件就向所有用户开放的。

    现在就讲处理方法。找到gio-0.12.0.tar.gz,解压缩到一个临时目录里。

    打开文件System/GIO/Volumes/VolumeMonitor.chs,光标移到第56行:

        vmDriveStopButton, 在这句前后加上两句,成为如下:

    #if GLIB_CHECK_VERSION(2,22,0)     vmDriveStopButton, #endif 为什么要这什么做呢?因为从这个源文件的后面可以得知vmDriveStopButton只在#if GLIB_CHECK_VERSION(2,22,0)才定义。

    打开文件System/GIO/Volumes/Drive.chs,在第59-60行前后加上两句,成为如下:

    #if GLIB_CHECK_VERSION(2,22,0)     DriveStartStopType (..),     DriveStartFlags (..), #endif 原因与上述雷同。

    最后,在解压的根目录(例如:K:/tmp/gio-0.12.0)下运行:

    cabal configure cabal build cabal install --global

    注意不加gio,因为在解压的根目录。 以后您如果遇到软件源码中有BUG,您就可以依照上述方法进行处理。

    3、安装pango出错

    离开上一步解压软件源码包的目录,继续运行cabal install gtk --global,当安装到pango会遇到如下报错:

    Preprocessing library pango-0.12.0... Graphics/Rendering/Pango/Structs.hsc:25:27: fatal error: glib-2.0/glib.h: No such file or directory compilation terminated.

    出现这个问题应当是INCLUDE没设好,可是我前面有设啊。运行pkg-config --cflags gtk+-2.0检查一下: -mms-bitfields -ID:/prgs/Gtk+/include/gtk-2.0 -ID:/prgs/Gtk+/lib/gtk-2.0/include -ID:/prgs/Gtk+/include/atk-1.0 -ID:/prgs/Gtk+/include/cairo -ID:/prgs/Gtk+/include/pango-1.0 -ID:/prgs/Gtk+/include/glib-2.0 -ID:/prgs/Gtk+/lib/glib-2.0/include -ID:/prgs/Gtk+/include/libpng12

    噢!原来是-ID:/prgs/Gtk+/include/glib-2.0,而不是-ID:/prgs/Gtk+/include。怎么改,我不会。不过我有办法,变通一下,绕过去,把glib-2.0整个目录复制上面其中的目录下(例如:D:/prgs/Gtk+/include/cairo)。如果您有更好的解决之道,麻烦不吝赐教,Thank you

    如果先处理了,再运行cabal install gtk --global,当安装到pango就不会报错了。

     

    就这样gtk2hs就安装好了。资料上讲内存至少1.5G,否则会死机,还好我的电脑内存是2G,没问题。

     

    六、安装glade

    cabal install glade --global

     

    完成任务!!!

     

    我也只是勉强完成安装,如果您有更好的处理方法,告诉我。


    最新回复(0)