Я успешно создал кросс-компилятор ghc, который позволяет мне компилировать код haskell для armv6h (в моем случае raspberry pi) с моей машины x64 linux. Я успешно запустил программу hello world на малине.
Нет, я хочу создать свое настоящее приложение, которое во многом зависит от других модулей Haskell. Когда я компилирую для x64, я просто делаю
cabal install dependenciy1 depenency2 ...
Я знаю, что могу сделать свою собственную программу кликой-проектом и автоматизировать этот шаг. Но дело не в этом.
Когда я пытаюсь использовать кросс-компилятор
arm-unknown-linux-gnueabi-ghc --make myapp.hs
Он говорит мне о модулях, которые он не смог найти. Конечно, они не установлены!
Я прочитал https://ghc.haskell.org/trac/ghc/wiki/Building/CrossCompiling и в соответствии с этим я пробовал
cabal --with-ghc=arm-unknown-linux-gnueabi-ghc --with-ghc-pkg=arm-unknown-linux-gnueabi-ghc-pkg --with-ld=arm-unknown-linux-gnueabi-ld install random
random - это зависимость, которую я пытаюсь установить здесь. Я получаю следующую ошибку:
Resolving dependencies...
Configuring random-1.0.1.3...
Failed to install random-1.0.1.3
Last 10 lines of the build log ( /home/daniel/.cabal/logs/random-1.0.1.3.log ):
/home/daniel/.cabal/setup-exe-cache/setup-Cabal-1.18.1.3-arm-linux-ghc-7.8.3.20140804: /home/daniel/.cabal/setup-exe-cache/setup-Cabal-1.18.1.3-arm-linux-ghc-7.8.3.20140804: cannot execute binary file
cabal: Error: some packages failed to install:
random-1.0.1.3 failed during the configure step. The exception was:
ExitFailure 126
Когда я делаю
file /home/daniel/.cabal/setup-exe-cache/setup-Cabal-1.18.1.3-arm-linux-ghc-7.8.3.20140804
я получил
/home/daniel/.cabal/setup-exe-cache/setup-Cabal-1.18.1.3-arm-linux-ghc-7.8.3.20140804: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 3.10.2, not stripped
Неудивительно, что он не может его выполнить. Он скомпилирован для руки.
Я что-то упустил здесь? Моя цель — подключить все зависимости, а затем создать статически связанное приложение, которое я могу развернуть на своей малине.
cabal get random
, затем перейти в каталогrandom-???
, а затемrunhaskell ./Setup.hs install --with-ghc=... ...
? - person bennofs   schedule 10.09.2014unrecognized 'install' option `--with-ghc=arm-unknown-linux-gnueabi-ghc' unrecognized 'install' option `--with-ghc-pkg=arm-unknown-linux-gnueabi-ghc-pkg' unrecognized 'install' option `--with-ld=arm-unknown-linux-gnueabi-ld'
- person Daniel Schmitz   schedule 10.09.2014runhaskell ./Setup.hs configure --with...
, затемrunhaskell ./Setup.hs build
и, наконец,runhaskell ./Setup.hs install
. - person bennofs   schedule 10.09.2014/home/daniel/x-tools/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/4.8.2/../../../../arm-unknown-linux-gnueabi/bin/ld: skipping incompatible /home/daniel/.cabal/lib/arm-linux-ghc-7.8.3.20140804/random-1.0.1.3/libHSrandom-1.0.1.3.a when searching for -lHSrandom-1.0.1.3
- person Daniel Schmitz   schedule 10.09.2014--disable-library-stripping
и--disable-executable-stripping
- person Yuras   schedule 10.09.2014hsc2hs
, убедитесь, что он получает флаг-x
, иначе он создаст экземплярыStorable
для хост-архитектуры вместо цели. IIRC Мне это было нужно дляnetwork
, иначе он разбился во время выполнения. - person Yuras   schedule 10.09.2014