Компиляция Haskell на малине Pi
Я пытаюсь собрать GHC 7.6.3 на Малиновой Пи.
7.4 версия GHC, которая поставляется с Raspbian, не поддерживает ghci.
Я намерен пакет v 7.6.3 и сделать его доступным.
После looong времени я получаю эту ошибку на Pi:
HC [stage 0] utils/hp2ps/dist/build/Key.o
HC [stage 0] utils/hp2ps/dist/build/PsFile.o
HC [stage 0] utils/hp2ps/dist/build/Shade.o
HC [stage 0] utils/hp2ps/dist/build/Utilities.o
"inplace/bin/mkdirhier" utils/hp2ps/dist/build/tmp//.
HC [stage 0] utils/hp2ps/dist/build/tmp/hp2ps
Warning: -rtsopts and -with-rtsopts have no effect with -no-hs-main.
Call hs_init_ghc() from your main() function to set these options.
"cp" -p utils/hp2ps/dist/build/tmp/hp2ps inplace/bin/hp2ps
cp driver/ghc-usage.txt inplace/lib/ghc-usage.txt
cp driver/ghci-usage.txt inplace/lib/ghci-usage.txt
HC [stage 0] utils/genapply/dist/build/GenApply.o
"inplace/bin/mkdirhier" utils/genapply/dist/build/tmp//.
HC [stage 0] utils/genapply/dist/build/tmp/genapply
"cp" -p utils/genapply/dist/build/tmp/genapply inplace/bin/genapply
HC [stage 1] libraries/ghc-prim/dist-install/build/GHC/Types.o
Stack dump:
0. Program arguments: /usr/bin/llc -O3 -relocation-model=static /tmp/ghc467_0/ghc467_0.bc -o /tmp/ghc467_0/ghc467_0.lm_s --enable-tbaa=true
1. Running pass 'Function Pass Manager' on module '/tmp/ghc467_0/ghc467_0.bc'.
2. Running pass 'ARM Instruction Selection' on function '@ghczmprim_GHCziTypes_Dzh_info'
/tmp/ghc467_0/ghc467_0.lm_s: openBinaryFile: does not exist (No such file or directory)
make[1]: *** [libraries/ghc-prim/dist-install/build/GHC/Types.o] Error 1
make: *** [all] Error 2
real 308m59.437s
user 292m8.320s
sys 10m18.220s
Любая идея, что происходит не так?
Как я могу получить недостающие промежуточные файлы, которые создаются системой сборки?
Ответы
Ответ 1
Я получил GHC-7.8.3, составленный с использованием малины PI из исходных источников. Это не очень быстро, но он выполняет свою работу:
[email protected] ~ $ ghci
GHCi, version 7.8.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> 1+1
2
Ключевыми являются следующие действия:
- Имейте достаточно памяти. Подключите внешний жесткий диск и создайте раздел подкачки 4 гигабайта. Сначала в
fdisk
выберите тип раздела для подкачки Linux, затем выполните mkswap /dev/sdXX
, наконец, замените swapon /dev/sdXX
, где XX
- это идентификатор диска и номер раздела.
- Обновите ядро до последней версии с помощью
rpi-update
, чтобы предотвратить зависания. Я также добавил smsc95xx.turbo_mode=N slub_debug=FP
в конец командной строки ядра в файле /boot/cmdline.txt
.
- Установите золотой линкер с
apt-get install binutils-gold
, потому что обычный ld.bfd
не сможет создать динамические библиотеки. Проблема в том, что вы не можете использовать gold
для связывания всего, но нужно связать этап 1 с ld.bfd
. Вы должны следовать инструкциям в этой script (исходной информации отсюда), за исключением того, что вам нужно использовать ld.bfd
для запуска начального вызова ./configure
.
- Имейте терпение - компиляция займет несколько дней.
Ответ 2
Вы всегда можете проверить официальную страницу haskell для R-Pi. Надеюсь, это поможет вам больше, чем это мне помогло. Есть некоторые действительно полезные ссылки.
http://www.haskell.org/haskellwiki/Raspberry_Pi