[英]Haskell ghc, linking error when trying to compile a program using ghc and Euterpea
[英]Haskell GHC 9.4.4 compile error when -fllvm and -O2?
$ ~/.ghcup/ghc/9.4.4/bin/ghc --make -fllvm -O2 test.hs
Loaded package environment from /home/dunham/.ghc/x86_64-linux-9.4.4/environments/default
[1 of 2] Compiling Main ( test.hs, test.o )
Cannot specify -O# and --passes=/--foo-pass, use -passes='default<O#>,other-pass'
<no location info>: error:
`opt' failed in phase `LLVM Optimiser'. (Exit code: 1)
然而
$ ~/.ghcup/ghc/9.4.4/bin/ghc --make -fllvm test.hs
Loaded package environment from /home/dunham/.ghc/x86_64-linux-9.4.4/environments/default
[1 of 2] Compiling Main ( test.hs, test.o )
[2 of 2] Linking test
和
/.ghcup/ghc/9.4.4/bin/ghc --make -O2 test.hs
Loaded package environment from /home/dunham/.ghc/x86_64-linux-9.4.4/environments/default
[1 of 2] Compiling Main ( test.hs, test.o )
[2 of 2] Linking test
測試.hs
import Data.Array.Base
import System.Environment
import Numeric
main = do
[arg] <- getArgs
let n = (read arg) - 1
let init = listArray (0,n) (repeat 1.0)
let (v:u:rest) = drop 19 $ iterate (eval_AtA_times_u n) init
let vBv = sum [(u!i)*(v!i) |i<-[0..n]]
let vv = sum [(v!i)*(v!i) |i<-[0..n]]
putStrLn $ showFFloat (Just 9) (sqrt (vBv/vv)) ""
eval_AtA_times_u n u = eval_At_times_u n v
where v = eval_A_times_u n u
eval_A x y = 1.0/((i+j)*(i+j+1)/2+i+1)
where i = fromIntegral x
j = fromIntegral y
eval_A_times_u :: Int -> UArray Int Double -> UArray Int Double
eval_A_times_u n u = unsafeAccumArray (+) 0 (0,n)
[(i,(eval_A i j) * u!j)|i<-[0..n], j<-[0..n]]
eval_At_times_u :: Int -> UArray Int Double -> UArray Int Double
eval_At_times_u n u = unsafeAccumArray (+) 0 (0,n)
[(i,(eval_A j i) * u!j)|i<-[0..n], j<-[0..n]]
需要安裝 LLVM 10、11、12 或 13,而不是 14 或 15。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.