Haskell, GHC, win32, cairo

У меня проблема с ghci + cairo на окнах. Когда я пытаюсь загрузить, например, как этот "ghci -package cairo", он терпит неудачу со следующей ошибкой:

Loading package random-1.0.0.2 ... linking ... done.
Loading package haskell98 ... linking ... done.
Loading package syb-0.1.0.2 ... linking ... done.
Loading package base-3.0.3.2 ... linking ... done.
Loading package mtl-1.1.0.2 ... linking ... done.
: C:\Users\alexeys\AppData\Roaming\cabal\cairo-0.12.0\ghc-6.12.3\HScairo-0.12.0.o: unknown symbol `_cairo_surface_destroy'
Loading package cairo-0.12.0 ... linking ... : unable to load package `cairo-0.12.0'

Даже самые простые программы не работают в интерактивном режиме, например, например, "Text.hs", который поставляется с пакетом cairo. Однако скомпилированный с 'ghc -make' работает как ожидалось, поэтому его проблема с отсутствующей dll - все на месте.

Я использовал 'filemon', чтобы посмотреть, что загружает "ghci", и в журнале я вижу "libcairo-2.dll" (и эта библиотека имеет определенный символ "_cairo_surface_destroy" ), который был найден и загружен успешно, я действительно понимаю - чего еще он хочет?

Ответ 1

Я подозреваю, что вы столкнулись со многими проблемами, которые я только что сделал.

Я попытался сделать что-то недавно с Haskell и ZeroMQ на окнах. GHC работает в Windows, а у ZeroMQ есть порт MingW32, и есть стандартный пакет ZeroMQ Cabal, поэтому я думал, что это сработает.

Однако:

  • GHC поддерживает только частичную поддержку динамической компоновки в Windows. См. здесь.
  • Пакет ZeroMQ Cabal зависит от статической версии libzmq.
  • GHC в Windows использует соглашения MingW32 для своих библиотек и библиотек dll.
  • ZeroMQ только создает динамический .dll в своем MingW32-порту, а не в статическом архиве .a.

Я не мог собрать все части, поэтому на моем окне окна не было кодирования ZeroMQ на основе Haskell.

Ответ 2

Запустите ghc-pkg check, чтобы убедиться, что он согласован.