Cree un ejecutable estático de Haskell Linux

No es frecuente que dos cosas que amo tanto se unan para causarme tanta molestia (además de mis hijos). He escrito un programa de Haskell en el trabajo que utiliza bibliotecas como text, xml-enumerator, attoparsec-text, etc. Lo tengo funcionando correctamente en mi máquina Windows en el trabajo, mi máquina virtual Ubuntu en el trabajo (32 bits), mi Escritorio de Ubuntu (32 bits nuevamente) y una instancia EC2 que ejecuta Ubuntu (64 bits).

Nuestro cliente ejecuta CentOS 5.3, 64 bits. Por mi vida no puedo hacer que este ejecutable se ejecute correctamente. Intenté crear un ejecutable estático usando:

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

Pero cuando intento ejecutar ese ejecutable en el servidor CentOS, recibo un mensaje de error:

openFile: invalid argument (Invalid argument)

Supongo que esto está relacionado conel error descrito aquí. Intenté compilar desde Ubuntu de 32 y 64 bits, probé compilaciones estáticas y compartidas, nada funciona (aunque ocasionalmente obtengo valores predeterminados en lugar del mensaje de error anterior). Puedo intentar descargar CentOS 5.3 y crear una máquina virtual para ello, pero me llevará un tiempo descargarlo, y no estoy seguro de qué versión de GHC funcionará (intenté obtener GHC 7 en su servidor, pero ejecuté en un problema de libc).

En este punto, he ideado algunos enfoques posibles, pero me gustaría evitarlos si es posible:

Vuelva a escribir en un idioma diferente (la idea de hacer esto en Java me marea, aunque podría ser un buen momento para probar Cal / OpenQuark). Tal vez pruebe un compilador alternativo, como jhc. Pero no estoy muy seguro de cómo comenzar a instalar todas las dependencias para este programa en jhc; si las personas tienen experiencia y saben que text / attoparsec / etc funcionan en jhc, me encantaría escucharlo.Hack de todos los hacks: crea un ejecutable de Windows, instala wine en su servidor y ejecútalo de esa manera.

omo un total aparte, estas son las situaciones donde yoDe Verda ojalá tuviéramos un back-end JVM para GHC. Supongo que también podría probar LambdaVM. Pero me encantaría escuchar consejos de la comunidad sobre qué hacer aquí.

Respuestas a la pregunta(3)

Su respuesta a la pregunta