Ho creato con successo un compilatore ghc cross, che mi consente di compilare il codice haskell per armv6h (raspberry pi nel mio caso) dalla mia macchina x64 x64. Ho eseguito con successo un programma Hello World sul lampone.Come si installano le dipendenze quando si compila il codice haskell?
No, voglio costruire la mia vera app, che ha molte dipendenze da altri moduli haskell. Quando compilo per x64 faccio semplicemente
cabal install dependenciy1 depenency2 ...
So che avrei potuto fare il mio programma una cabala-progetto di una automatizzare questo passo. Ma non è questo il punto qui.
Quando provo ad utilizzare il cross-compilatore
arm-unknown-linux-gnueabi-ghc --make myapp.hs
Mi dice sui moduli non poteva trovare. Certo, non sono installati!
ho letto https://ghc.haskell.org/trac/ghc/wiki/Building/CrossCompiling e secondo che ho provato
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
casuale è la depenency che sto cercando di installare qui. Ottengo il seguente errore:
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
Quando faccio
file /home/daniel/.cabal/setup-exe-cache/setup-Cabal-1.18.1.3-arm-linux-ghc-7.8.3.20140804
ottengo
/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
Non c'è da stupirsi che non può eseguirlo. È compilato per il braccio.
Mi manca qualcosa qui? Il mio obiettivo è inserire tutte le dipendenze, quindi creare un'app collegata staticamente che possa essere distribuita sul mio lampone.
si può provare 'cabala get random', quindi cd nella directory 'random - ???', e quindi 'runhaskell ./Setup.hs install --with-ghc = ... ...' '? – bennofs
Quando lo faccio ottengo l'opzione 'install' non riconosciuta \ '--with-ghc = arm-unknown-linux-gnueabi-ghc ' opzione' install 'non riconosciuta \' --with-ghc-pkg = arm- unknown-linux-gnueabi-ghc-pkg ' opzione' install 'non riconosciuta \ '--with-ld = arm-unknown-linux-gnueabi-ld'' –
Oh, sembra che tu debba fare' runhaskell ./Setup. hs configure --with ... ', quindi' runhaskell ./Setup.hs build' e infine 'runhaskell ./Setup.hs install'. – bennofs