如何在Windows 7(64位)上安装Helm(https://hackage.haskell.org/package/helm)?
(更新:我在这里发布了很多错误消息,但我已将它们移到我的答案中,以免弄乱问题。)
答案 0 :(得分:1)
Windows 64位安装:
我包含错误消息,因为如果您按照所有步骤进行操作,然后尝试直接安装。这是来自许多不同帖子的一系列临时步骤的集合。任何简化都将不胜感激!
注意:所有工作都在没有空格的目录中。我在C:/ PF中完成所有工作;将其修改为您的目录。
从https://msys2.github.io/下载MSYS2-x86_64并安装它。 Cabal安装cairo(或helm)将提供如下内容:
配置cairo-0.13.1.0 ... setup.exe:缺少对外部库的依赖:
下载C库。在MINGW64(不是MSYS2 - 我在过程的随机阶段遇到MSYS2问题),使用包管理器:
pacman -Ss cairo
搜索Cairo包。您将找到" mingw64 / mingw-w64-x86_64-cairo",请安装:
pacman -S mingw64/mingw-w64-x86_64-cairo
*。应将PC文件添加到C:\ PF \ msys64 \ mingw64 \ lib \ pkgconfig和C:\ PF \ msys64 \ usr \ lib \ pkgconfig。 (pkg-config需要能够找到这些文件。它在PKG_CONFIG_PATH中查找,默认情况下应该有上面的lib / pkgconfig文件夹。在这里移动文件最简单。参见Can't install sdl2 via cabal)如果你得到
The pkg-config package ... version ... cannot be found
错误然后检查您的* .pc文件。
重复其他必需的库,例如atk
pacman -S mingw64/mingw-w64-x86_64-atk
(我不知道完整列表,但稍后会出现错误消息,告诉您该怎么做。)
获取这些库的开发文件(由How to install cairo on Windows建议)。他们中的大多数都是http://ftp.gnome.org/pub/gnome/binaries/win64/gtk+/2.22/捆绑在一起。解压缩。
(2)和(3)可能是多余的。我不知道 - 我做了两件事。
此时你可以做" cabal安装cairo"。 (警告:如果您的最终目标是其他目标,您可能不希望" cabal安装"中间包,请参阅https://wiki.haskell.org/Cabal/Survival#Issue_.232_--_Not_installing_all_the_packages_in_one_go。) 有关指定extra-include-dirs和extra-lib-dirs的语法,请参阅(4)(但如果您复制了上面的文件,则不应该这样做),
任何时候你
Missing (or bad) header file
检查是否将* .h文件复制到mingw64 \ include和/或将include文件夹添加到PATH。如果问题仍然存在,请使用cabal install -v3获取详细的错误消息。
如果你得到像
这样的东西cairo-0.13.1.0: include-dirs: /mingw64/include/freetype2 is a relative path
which makes no sense (as there is nothing for it to be relative to). You can
make paths relative to the package database itself by using ${pkgroot}. (use
--force to override)
尝试--ghc-pkg-options =" - 强制" (如https://github.com/gtk2hs/gtk2hs/issues/139所述)。
获取SDL。否则你会得到
configure:error:***找不到SDL!从www.libsdl.org获取SDL。 如果您已安装它,请在路径中查看它。如果问题依旧, 请发送邮件到./configure --version中显示的地址 指示您的平台,配置脚本的版本和问题。 无法安装SDL-0.6.5.1
按照(2)中的说明获取sdl / sdl2库。 (请参阅此处的说明Installing SDL on Windows for Haskell (GHC)。)
新版本helm-0.7.1需要sdl2,但写作时helm-0.7.1还存在其他依赖性问题。从http://sourceforge.net/projects/msys2/files/REPOS/MINGW/x86_64/下载SDL(直到下载链接到编写http://sourceforge.net/projects/msys2/files/REPOS/MINGW/x86_64/mingw-w64-x86_64-SDL-1.2.15-7-any.pkg.tar.xz.sig/download时的最新版本),解压缩。 " cabal安装sdl"给出
* Missing (or bad) header file: SDL/SDL.h
* Missing C library: SDL
This problem can usually be solved by installing the system package that
provides this library (you may need the "-dev" version). If the library is
already installed but in a non-standard location then you can use the flags
--extra-include-dirs= and --extra-lib-dirs= to specify where it is.
所以我们指定dirs的位置(根据你提取sdl的位置改变名称)
cabal install sdl --extra-include-dirs=C:/PF/sdl\include --extra-lib-dirs=C:/sdl/lib
如果您有SDL2(http://libsdl.org/download-2.0.php)(对于较新版本的Helm):在发布版本中有一个致命错误尚未修复。 (如果你没有修复它,cabal安装-v3取决于它的东西会给出错误
winapifamily.h: No such file or directory
("winapifamily.h: No such file or directory" when compiling SDL in Code::Blocks)下载https://hg.libsdl.org/SDL/raw-file/e217ed463f25/include/SDL_platform.h,替换include文件夹和C:/ PF / msys64 / mingw64 / include / SDL2中的文件。
以下
cd gtk2hs/tools
cabal install
cd ../glib
cabal install
cd ../gio
cabal install
cd ../pango
cabal install --ghc-pkg-options="--force"
(也许你之前已经安装了glib和gio?我这样做了,因为正常安装Pango会给我造成错误(https://github.com/gtk2hs/gtk2hs/issues/110)
pango-0.13.1.0: include-dirs: /mingw64/include/freetype2 is a relative path
which makes no sense (as there is nothing for it to be relative to). You can
make paths relative to the package database itself by using ${pkgroot}. (use
--force to override)
一旦Helm开发人员更新了东西,你就应该能够做到这一点。但是现在似乎存在依赖性问题。对我来说,cabal会自动尝试安装helm-0.4(可能是因为0.4并没有给出依赖关系的上限,而较新的版本会这样做。你可以尝试" cabal解包"删除上限。 ..)。然后
cabal unpack helm-0.4
安装会出错,因为"纯粹"被转移到Prelude。打开helm-0.4 \ src \ FRP \ Helm \ Automaton.hs并更改第17行:
import Prelude hiding (id, (.), pure)
现在
cabal install
(这是0.4 - 如果您尝试使用新的Helm,请在网站上查看更新的样本)
import FRP.Helm
import qualified FRP.Helm.Window as Window
render :: (Int, Int) -> Element
render (w, h) = collage w h [filled red $ rect (fromIntegral w) (fromIntegral h)]
main :: IO ()
main = run $ fmap (fmap render) Window.dimensions
如果您收到有关缺少.dll(sdl.dll)的错误,请在bin /文件夹中找到它并将该文件夹添加到PATH(或将其复制到路径上的某个位置)。