Я думаю, что это связано с отсутствием поддержки.Однако я не могу получить прямой ответ относительно того, поддерживает ли GHC в настоящее время динамическое связывание.Вики-странице GHC SharedLibraries / PlatformSupport исполнилось два года.
В Windows я попытался собрать целую кучу пакетов с --enable-shared
, включая простую написанную мной программу, использующую http-enumerator для загрузки с URL каждые 30 секунд.Когда я запустил программу (после помещения всех библиотек DLL в папку с моей программой), через несколько секунд произошла ошибка.Когда я скомпилировал с --threaded
, он сразу вышел из строя.
Я попробовал это в GHC 7.0.3.Страница документации для этой версии гласит:
В настоящее время преобразование библиотек Haskell в библиотеки DLL не работает в Windows;мы надеемся восстановить эту возможность в будущем (см. Раздел 4.12, «Использование общих библиотек»)....
Это уведомление не появляется в более поздних версиях.
Кстати, помимо размера кода, есть еще одна проблема со статическими двоичными файлами.GHC использует GMP для поддержки больших целых чисел.GMP лицензируется в соответствии с LGPL.Это означает, что если вам нужно распространять проприетарный двоичный файл или если у вас есть зависимость, которая не совместима с GPL (например, OpenSSL), вам нужно будет распространять ваши объектные файлы в соответствии с лицензией GMP.Либо так, либо найдите способ динамически связать libgmp.Я хотел бы знать, как это сделать.