2011-07-09 38 views
5

我正試圖從Hackage構建double-conversion包。它建立好,但ghci無法加載它。投訴:Hackage包中的未定義符號`雙重轉換'

Loading package double-conversion-0.2.0.0 ... linking ... <interactive>: 
/home/me/.cabal/lib/double-conversion-0.2.0.0/ghc-7.0.4/HSdouble-conversion-0.2.0.0.o: 
unknown symbol `_ZNK17double_conversion6Double5valueEv' 

nm輸出顯示符號

nm /home/me/.cabal/lib/double-conversion-0.2.0.0/ghc-7.0.4/HSdouble-conversion-0.2.0.0.o \ 
    | grep _ZNK17double_conversion6Double5valueEv 
00000000 W _ZNK17double_conversion6Double5valueEv 

這是文件中唯一的弱符號,而事實上,據我所知,在整個GHC編譯軟件包的世界裏。

有問題的函數顯然是FFI,用C++編寫,並在內聯定義在double-conversion/src/double.h。它不是唯一的內聯函數,但只有這個被標記爲弱。

作爲一項臨時措施,我已經將該功能移出了行,並且現在加載了該軟件包。但是那裏顯然存在一些問題。爲什麼這個功能很弱?爲什麼其他功能不是? ghc應該抱怨軟弱的符號嗎?我應該提交一個bug,如果有的話,誰應該得到它(雙轉換,gcc,ghc,別人?)

系統數據:Gentoo Linux,gcc-4.4.5,ghc-7.0.4,cabal -1.10.2.0。

+0

如果您嘗試安裝「文本格式」,會出現什麼錯誤?也許Yesod嘗試使用Template Haskell進行雙重轉換? –

+0

你有沒有嘗試使用覆蓋? – alternative

+0

@monadic:我實際上使用覆蓋,只有在失敗後我嘗試了本地'cabal install'。錯誤消息是相同的。 @Mikhail Glushenkov:我實際上可以安裝'text-format',但不是'yesod'。錯誤消息是相同的。 –

回答

1

GHC Trac上的這張票看起來有關: Can't use ghci with a library linked against libstdc++這看起來像一個Gentoo(或可能GCC 4.4)特定的問題 - .o文件在我的系統中不包含任何弱符號(我在Ubuntu Natty上使用GCC 4.5.2 & GHC 7.0.3/7.0進行了測試。 4)。我建議你在GHC Trac上提交一張票。順便說一下,我可以重現#5289。

+0

這不僅僅是GHCi。依賴於'double-conversion'的軟件包不會安裝(最終我正在嘗試構建'yesod')。錯誤消息也不同。 –

+1

有趣! 'cabal install text-conversion'適用於我,所以這可能是Gentoo特有的問題。在我的系統中,'nm'不會在'HSdouble-conversion-0.2.0.0.o'中顯示任何弱符號。 –

+0

你使用哪個版本的ghc和gcc? –