在 Windows 上安装 Cairo、Helm
Installing Cairo, Helm on Windows
如何在 Windows 7(64 位)上安装 Helm (https://hackage.haskell.org/package/helm)?
(更新:我在这里发布了很多错误消息,但我已将它们移到我的答案中以免弄乱问题。)
Windows 64 位的安装:
我包含了错误消息,因为如果您按照之前的所有步骤进行操作,然后直接尝试安装。这是遵循许多不同帖子的一系列临时步骤的集合。任何简化将不胜感激!
注意:所有工作都在没有空格的目录中进行。我在 C:/PF 中完成所有工作;将此修改为您的目录。
从 https://msys2.github.io/ 下载 MSYS2-x86_64 并安装。 Cabal install cairo(或 helm)会给出如下内容:
正在配置 cairo-0.13.1.0...
setup.exe:缺少对外国图书馆的依赖:
- 缺少 C 库:z、cairo、z、gobject-2.0、ffi、pixman-1、fontconfig、
expat, freetype, iconv, expat, freetype, z, bz2, harfbuzz, glib-2.0, 国际,
ws2_32、ole32、winmm、shlwapi、国际、png16、z
下载 C 库。在 MINGW64 中(不是 MSYS2 - 我在过程中的随机阶段遇到了 MSYS2 的问题),使用包管理器:
pacman -Ss 开罗
搜索开罗包。你会发现 "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). Most of them are bundled up at http://ftp.gnome.org/pub/gnome/binaries/win64/gtk+/2.22/的建议。解压。
- 将lib中的文件(.a, .dll.a)复制到C:\PF\msys64\mingw64\lib。复制包含 .pc 文件的 pkgconfig 文件夹。
- 将include中的文件复制到C:\PF\msys64\mingw64\include.
- 在路径中添加C:\PF\gtk+-2.22.1\bin.
(2) 和 (3) 可能是多余的。我不知道 - 我都做了。
此时你大概可以做到"cabal install cairo"。 (警告:如果您的最终目标是其他目标,您可能不想 "cabal install" 中间包,请参阅 https://wiki.haskell.org/Cabal/Survival#Issue_.232_--_Not_installing_all_the_packages_in_one_go。)
请参阅 (4) 以了解指定 extra-include-dirs 和 extra-lib-dirs 的语法(但如果您复制了上面的文件,则不需要),
任何时候你得到
Missing (or bad) header file
检查是否已将 *.h 文件复制到 mingw64\include and/or 将 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="--force"(如 https://github.com/gtk2hs/gtk2hs/issues/139 所述)。
获取 SDL。否则你会得到
配置:错误:*** 未找到 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/ (direct download link to newest version as of writing 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 下载 SDL),解压。 "cabal install 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.
所以我们指定目录的位置(根据您将 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 install -v3 东西会报错
winapifamily.h: No such file or directory
("winapifamily.h: No such file or directory" when compiling SDL in Code::Blocks) Download https://hg.libsdl.org/SDL/raw-file/e217ed463f25/include/SDL_platform.h,替换include文件夹和C:/PF/msys64/mingw64/include/SDL2.
中的文件
- 从 http://code.haskell.org/gtk2hs 和 运行
下载 gtk2hs
以下
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 install helm",但现在似乎存在依赖性问题。对我来说,cabal 会自动尝试安装 helm-0.4(可能是因为 0.4 没有给出依赖项的上限,而较新的版本有。您可以尝试 "cabal unpack"ing 并删除上限...)。然后
cabal 解压 helm-0.4
安装出错,因为 "pure" 已移至 Prelude。打开 helm-0.4\src\FRP\Helm\Automaton.hs 并更改第 17 行:
import Prelude hiding (id, (.), pure)
现在
cabal install
- 尝试使用 Helm
编译和 运行 一个程序
(这是 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(或将其复制到您路径中的某个位置)。
如何在 Windows 7(64 位)上安装 Helm (https://hackage.haskell.org/package/helm)?
(更新:我在这里发布了很多错误消息,但我已将它们移到我的答案中以免弄乱问题。)
Windows 64 位的安装:
我包含了错误消息,因为如果您按照之前的所有步骤进行操作,然后直接尝试安装。这是遵循许多不同帖子的一系列临时步骤的集合。任何简化将不胜感激!
注意:所有工作都在没有空格的目录中进行。我在 C:/PF 中完成所有工作;将此修改为您的目录。
从 https://msys2.github.io/ 下载 MSYS2-x86_64 并安装。 Cabal install cairo(或 helm)会给出如下内容:
正在配置 cairo-0.13.1.0... setup.exe:缺少对外国图书馆的依赖:
- 缺少 C 库:z、cairo、z、gobject-2.0、ffi、pixman-1、fontconfig、 expat, freetype, iconv, expat, freetype, z, bz2, harfbuzz, glib-2.0, 国际, ws2_32、ole32、winmm、shlwapi、国际、png16、z
下载 C 库。在 MINGW64 中(不是 MSYS2 - 我在过程中的随机阶段遇到了 MSYS2 的问题),使用包管理器:
pacman -Ss 开罗
搜索开罗包。你会发现 "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). Most of them are bundled up at http://ftp.gnome.org/pub/gnome/binaries/win64/gtk+/2.22/的建议。解压。
- 将lib中的文件(.a, .dll.a)复制到C:\PF\msys64\mingw64\lib。复制包含 .pc 文件的 pkgconfig 文件夹。
- 将include中的文件复制到C:\PF\msys64\mingw64\include.
- 在路径中添加C:\PF\gtk+-2.22.1\bin.
(2) 和 (3) 可能是多余的。我不知道 - 我都做了。
此时你大概可以做到"cabal install cairo"。 (警告:如果您的最终目标是其他目标,您可能不想 "cabal install" 中间包,请参阅 https://wiki.haskell.org/Cabal/Survival#Issue_.232_--_Not_installing_all_the_packages_in_one_go。) 请参阅 (4) 以了解指定 extra-include-dirs 和 extra-lib-dirs 的语法(但如果您复制了上面的文件,则不需要),
任何时候你得到
Missing (or bad) header file
检查是否已将 *.h 文件复制到 mingw64\include and/or 将 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="--force"(如 https://github.com/gtk2hs/gtk2hs/issues/139 所述)。
获取 SDL。否则你会得到
配置:错误:*** 未找到 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/ (direct download link to newest version as of writing 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 下载 SDL),解压。 "cabal install 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.
所以我们指定目录的位置(根据您将 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 install -v3 东西会报错
winapifamily.h: No such file or directory
("winapifamily.h: No such file or directory" when compiling SDL in Code::Blocks) Download https://hg.libsdl.org/SDL/raw-file/e217ed463f25/include/SDL_platform.h,替换include文件夹和C:/PF/msys64/mingw64/include/SDL2.
中的文件- 从 http://code.haskell.org/gtk2hs 和 运行 下载 gtk2hs
以下
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 install helm",但现在似乎存在依赖性问题。对我来说,cabal 会自动尝试安装 helm-0.4(可能是因为 0.4 没有给出依赖项的上限,而较新的版本有。您可以尝试 "cabal unpack"ing 并删除上限...)。然后
cabal 解压 helm-0.4
安装出错,因为 "pure" 已移至 Prelude。打开 helm-0.4\src\FRP\Helm\Automaton.hs 并更改第 17 行:
import Prelude hiding (id, (.), pure)
现在
cabal install
- 尝试使用 Helm 编译和 运行 一个程序
(这是 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(或将其复制到您路径中的某个位置)。