Ответ 1
Stack включает в себя копию msys2 в Windows, которая содержит диспетчер пакетов pacman
, поэтому мы можем запустить:
stack exec -- pacman -Sy mingw64/mingw-w64-x86_64-icu
stack build text-icu
Мне удалось установить text-icu
без ошибок. (Я использовал --extra-lib-dirs
и --extra-include-dirs
для указания на каталоги lib
и include
в двоичном дистрибутиве icu4c.)
Я также смог создать следующую простую программу, которая использует 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
.
У кого-нибудь есть text-icu
и работает в Windows? Можете ли вы сказать мне, что я делаю неправильно?
Stack включает в себя копию msys2 в Windows, которая содержит диспетчер пакетов pacman
, поэтому мы можем запустить:
stack exec -- pacman -Sy mingw64/mingw-w64-x86_64-icu
stack build text-icu
Мне это удалось:
icu/bin
в каталог C:\bin
, который находится на моем %PATH%
. Извлеките содержимое icu
в каталог C:\bin\icu
.stack ghci text-icu --extra-lib-dirs=c:\bin --extra-include-dirs=c:\bin\icu\include
.import Data.Text.ICU.Normalize
, затем :set -XOverloadedStrings
, затем normalize None "test"
.icuuc.dll
, возьмите C:\bin\icuuc56.dll
и сделайте копию в C:\bin\icuuc.dll
. Для меня было три соответствующие DLL.После всего этого я могу нормализовать строку в ghci
.
Именно так окна реагируют на отсутствующую статическую зависимость. Когда операционная система запускает процесс, он ищет статические зависимости. Если этого не хватает, программа не запускается.
Используйте параметр depend.exe, чтобы узнать, какой импорт отсутствует. Это может быть недостающая dll или неверная версия.
Зависимости доступны с помощью 1. Visual Studio 2. Платформа Microsoft Platform SDK 3. Другие пакеты microsoft 4. http://www.dependencywalker.com
Это довольно незаменимо при отслеживании того, что происходит в этом случае.
вы должны проверить, нет ли какой-либо DLL, отсутствующей в cygcheck.check, и переменные окружения Windows тоже с правильной. Или попробуйте переустановить следующую процедуру haskell.
http://www.haskell.org/haskellwiki/Windows#Tools_for_compilation
удача