Не так часто две вещи, которые я так люблю, объединяются, чтобы вызвать у меня столько раздражения (помимо моих детей). Я написал программу 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; если люди имеют опыт и знают, что текст /attoparsec/etc работают в jhc, я бы хотел его услышать.
- Взлом всех хаков: создайте исполняемый файл Windows, установите вино на свой сервер и запустите его таким образом.
В целом, это ситуации, когда я действительно хочу, чтобы у нас был JVM-сервер для GHC. Полагаю, я тоже мог попробовать LambdaVM. Но я хотел бы услышать советы сообщества о том, что делать здесь.