2014-02-08 51 views
0

我想從源代碼編譯haskell ghc。我嘗試從不同於/ usr /的文件夾配置我的cabal配置。從一開始,它總是能夠成功構建任何軟件包。如何更改ghc-pkg中的庫dirs

在某些時候(安裝軟件包cabal-install之後),我改變了我的cabal配置文件以包含另一個「library-dirs」。然後,發生了一些錯誤(可能是因爲錯誤的字符串被插入到cabal配置中的「library-dirs」字段中)。因此,我嘗試重新配置我的cabal配置文件(我甚至刪除了配置文件並嘗試清理ghc包緩存)和註釋字段「library-dirs」選項,但仍然失敗。我也已經嘗試刪除cabal軟件包目錄(cabal保存有關軟件包緩存的目錄)。

這是輸出利用 「GHC-PKG檢查」 時:

Warning: library-dirs: {stripped} doesn't exist or isn't a directory 

這是輸出現在,當我使用從Setup.hs小集團或手動構建包:

sudo -E cabal --config-file=/opt/haskell/config/config install hashable -O2 --global --flags="-fllvm" --prefix=/opt/haskell 2>error --upgrade-dependencies --reinstall 
Resolving dependencies... 
Configuring hashable-1.2.1.0... 
Building hashable-1.2.1.0... 
Failed to install hashable-1.2.1.0 
Last 10 lines of the build log (/{stripped}/hashable-1.2.1.0.log): 

Data/Hashable/Class.hs:100:15: Warning: 
    Literal 15868100553162883236 is out of the Int range -9223372036854775808..9223372036854775807 
[2 of 3] Compiling Data.Hashable.Generic (Data/Hashable/Generic.hs, dist/build/Data/Hashable/Generic.o) 

Data/Hashable/Generic.hs:20:1: Warning: 
    The import of ‛Bits’ from module ‛Data.Bits’ is redundant 
[3 of 3] Compiling Data.Hashable (Data/Hashable.hs, dist/build/Data/Hashable.o) 
/usr/bin/ld: cannot find {stripped}: No such file or directory 
collect2: error: ld returned 1 exit status 

這是cabal配置文件:(任何默認值被剝離)

remote-repo: hackage.haskell.org:http://hackage.haskell.org/packages/archive 
remote-repo-cache: /opt/haskell/cabal 
world-file: /opt/haskell/cabal/world 
extra-prog-path: /opt/haskell/cabal/bin 
build-summary: /opt/haskell/cabal/logs/build.log 
remote-build-reporting: anonymous 
jobs: $ncpus 

install-dirs global 
    prefix: /opt/haskell/ 

任何人都可以幫我o r指導我?或者至少告訴我,ghc實際上保存了卸載軟件包的「library-dirs」配置信息?

cabal -V 
cabal-install version 1.18.0.2 
using version 1.18.1.3 of the Cabal library 

ghc -v 
The Glorious Glasgow Haskell Compilation System, version 7.9.20140206 

謝謝。

回答

0

我相信這可能是由於每個包在第一次創建時都包含位置的完整路徑。調查。 .ghc/YOUR_PLATFORM/package.conf.d(對我來說,這是.ghc/x86_64-darwin-7.6.3/package.conf.d)。你會看到很多.conf文件,每個將包含硬編碼路徑:

[...] 
import-dirs: /Users/pejvan/Library/Haskell/ghc-7.6.3/lib/pandoc-types-1.12.3.3/lib 
library-dirs: /Users/pejvan/Library/Haskell/ghc-7.6.3/lib/pandoc-types-1.12.3.3/lib 
[...] 
haddock-interfaces: /Users/pejvan/Library/Haskell/ghc-7.6.3/lib/pandoc-types-1.12.3.3/doc/html/pandoc-types.haddock 
haddock-html: /Users/pejvan/Library/Haskell/ghc-7.6.3/lib/pandoc-types-1.12.3.3/doc/html 

您可以手動更新文件內容指向正確的位置,或者寫一個腳本這會爲你做。

然後,你需要更新package.cache文件(可能在這裏和那裏需要須藤):最後

pejvan$ ghc-pkg recache

pejvan$ ghc-pkg recache --user

,檢查一切現在是罰款: pejvan$ ghc-pkg check

相關問題