Портативный компилятор Haskell

1733
Matthew Piziak

У меня есть программа на Haskell, которую я хочу запустить в кластере моей школы, но их версия GHC слишком старая, и они не будут ее обновлять. Я хочу как-то упаковать его с моим исходным кодом, но по умолчанию требуется запуск сценария установки. Могу ли я получить обновленный исполняемый файл компилятора Haskell, который все равно будет работать, если я отправлю его на другую машину?

Я мог бы просто кросс-компилировать свой код локально и отправить исполняемый файл поверх, но я бы предпочел, чтобы он был встроен в сам кластер.

6

1 ответ на вопрос

11
Mikhail Glushenkov

Когда у меня возникла эта проблема, я просто установил GHC в свой домашний каталог:

$ wget http://www.haskell.org/ghc/dist/7.6.1/ghc-7.6.1-i386-unknown-linux.tar.bz2 $ tar xjvf ghc-7.6.1-i386-unknown-linux.tar.bz2 $ cd ghc-7.6.1-i386-unknown-linux $ ./configure --prefix=/home/user/bin/ghc-7.6.1 $ make install $ export PATH=/home/user/bin/ghc-7.6.1/bin:$PATH 

После этого вы сможете использовать последнюю версию GHC в своей учетной записи.

До недавнего времени в моей системе было установлено примерно десять GHC, большинство из которых находились в моем домашнем каталоге. :] camccann 11 лет назад 2
Спасибо! В идеале я хотел бы, чтобы любой пользователь мог скомпилировать мою программу через `make` в моей директории с исходным кодом, но это шаг вперед! Matthew Piziak 11 лет назад 0
@ MatthewPiziak, если вы сделаете локальную установку ghc доступной для чтения (и, при необходимости, исполняемой), любой пользователь сможет использовать ее, если у него есть путь. 11 лет назад 2
Ой! Как бы я это сделал? `chmod` в исполняемом файле? Matthew Piziak 11 лет назад 0
Точно, а также библиотеки. Используя каталог установки из этого ответа, быстрое решение - `chmod -R o + rX / home / user / bin / ghc-7.6.1`. Конечно, / home / user / bin также должен быть читабельным. Вы, вероятно, захотите изменить настройки cabal для установки библиотек в глобальную базу данных по умолчанию, так как «глобальная база данных» фактически локальна для каждой установки ghc. Затем, когда вы установите пакет в глобальную базу данных вашего локального ghc, все остальные, использующие ваш ghc, также получат доступ. 11 лет назад 1
О, если вы устанавливаете libs после запуска chmod, вам, вероятно, придется снова запустить chmod, чтобы сделать их читабельными. Возможно, вы захотите использовать `setfacl` или подобное, чтобы сделать по умолчанию` / home / user / bin / ghc-7.6.1` новые подпапки и файлы по умолчанию для глобального чтения. Или нет, в зависимости от ваших личных предпочтений конфиденциальности / безопасности. 11 лет назад 0