Создать статический исполняемый файл Haskell Linux

Нечасто, что две вещи, которые я так люблю, объединяются и вызывают у меня столько раздражения (помимо моих детей). Я написал программу на Haskell на работе, которая использует библиотеки, такие как text, xml-enumerator, attoparsec-text и т. Д. У меня он работает нормально на моей машине с Windows на работе, моей виртуальной машине Ubuntu на работе (32-разрядной), моем рабочем столе Ubuntu (снова 32-разрядной версии) и экземпляре EC2 под управлением Ubuntu (64-разрядной версии).

Наш клиент работает под управлением CentOS 5.3, 64-бит. Я не могу, хоть убей, заставить этот исполняемый файл работать правильно. Я попытался создать статический исполняемый файл, используя:

ghc --make myprog.hs -optl-static -optl-pthread

Но когда я пытаюсь запустить этот исполняемый файл на сервере CentOS, я получаю сообщение об ошибке:

openFile: invalid argument (Invalid argument)

Я предполагаю, что это связано с ошибкой, описанной здесь . Я пробовал компилировать как из 32, так и из 64-битной Ubuntu, пробовал статические и общие сборки, ничего не работает (хотя иногда я получаю segfaults вместо вышеуказанного сообщения об ошибке). Я могу попробовать загрузить CentOS 5.3 и создать для него виртуальную машину, но загрузка займет некоторое время, и я ' Я не уверен, какая версия GHC будет работать на нем (я пытался установить GHC 7 на их сервер, но столкнулся с проблемой libc).

На данный момент я придумал несколько возможных подходов, но я Я бы хотел избежать этого, если это вообще возможно:

  • Перепишите на другом языке (мысль сделать это на Java вызывает у меня тошноту, хотя это может быть хорошее время, чтобы попробовать Cal / OpenQuark).
  • Может быть, попробуйте альтернативный компилятор, например jhc. Но я не совсем уверен, как начать установку всех зависимостей для этой программы в jhc; Если у людей есть опыт и они знают, что text / attoparsec / etc работают в jhc, я бы хотел это услышать.
  • Взлом на все взломы: создайте исполняемый файл Windows, установите Wine на свой сервер и запустите его таким образом.

] В целом, это ситуации, когда я действительно хотел бы, чтобы у нас был бэкэнд JVM для GHC. Полагаю, я мог бы также попробовать LambdaVM. Но я бы хотел услышать советы сообщества о том, что здесь делать.

24
задан Don Stewart 10 May 2011 в 17:13
поделиться