如何在Windows上使用text-icu?
我能够无差错地安装text-icu
。 (我用--extra-lib-dirs
和--extra-include-dirs
指向icu4c二进制发行版中的lib
和include
目录。)
我也能够通过做ghc --make icu.hs
来构build下面使用text-icu
简单程序ghc --make icu.hs
:
-- icu.hs import Data.Text.ICU main = print $ Locale "tr-TR"
在这些步骤中没有任何错误或警告。 但是,当我尝试运行编译的程序icu.exe
,我根本没有输出。 我期望得到一个Locale "tr-TR"
,但是我什么也得不到,甚至没有任何错误或警告。 如果我尝试,情况仍然如此
main = do print $ Locale "tr-TR" print "Done"
所以使用text-icu
东西似乎会导致程序默默地失败。 echo $?
产生False
。
有没有人在Windows上运行text-icu
? 你能告诉我我做错了什么吗?
Stack包含Windows上的msys2副本,其中包含pacman
软件包pipe理器,所以我们可以运行:
stack exec -- pacman -Sy mingw64/mingw-w64-x86_64-icu stack build text-icu
我是这样做的:
- 从http://site.icu-project.org/download/56#TOC-ICU4C-Download下载该二进制文件,具体为http://download.icu-project.org/files/icu4c/56.1/icu4c-56_1-Win32 -msvc10.zip 。
- 将
icu/bin
的内容提取到我的%PATH%
目录下的C:\bin
目录下。 将icu
的内容提取到目录C:\bin\icu
。 - 使用堆栈运行
stack ghci text-icu --extra-lib-dirs=c:\bin --extra-include-dirs=c:\bin\icu\include
。 - 在GHCi中,运行
import Data.Text.ICU.Normalize
,然后:set -XOverloadedStrings
,然后normalize None "test"
。 - 对于报告为无法find的每个dll,例如
icuuc.dll
,请将C:\bin\icuuc56.dll
复制到C:\bin\icuuc.dll
。 对我来说,有三个相关的DLL。
毕竟,我可以在ghci
规范一个string。
这是Windows如何对缺less的静态依赖项作出反应。 当操作系统启动一个进程时,它会查找静态依赖关系。 如果缺less一个,那么程序不会启动。
使用depends.exe来找出缺less什么input。 这可能是一个缺less的DLL或者是一个错误的版本。
取决于1. Visual Studio 2. Microsoft Platform SDK 3.其他Microsoft软件包4. http://www.dependencywalker.com
在追查这种情况下发生的事情时,这是非常不可或缺的。
你应该检查是否有一些DLL丢失与cygcheck.check的path和Windows环境variables也是正确的。 或者尝试按照haskell过程重新安装。
http://www.haskell.org/haskellwiki/Windows#Tools_for_compilation
祝你好运