2011-07-09 7 views
5

私はパッケージをHackageからビルドしようとしています。それは正常に構築されますが、ghciはロードできません。苦情がある:Hackageパッケージの未定義シンボル `double-conversion`

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でコンパイルされたパッケージの世界全体で

問題のある関数は、明らかにC++で書かれ、double-conversion/src/double.hにインラインで定義されたFFIの関数です。そこには唯一のインライン関数ではありませんが、このクラスだけがweakというラベルが付けられています。

一時的な対策として、関数をアウトラインで移動し、パッケージがロードされるようになりました。しかしそこには明らかに何らかの問題があります。なぜこの機能が弱いのですか?なぜ他の機能がないのですか? ghcは弱い記号で文句を言うべきですか?バグを報告する必要がありますか?もしそうなら、誰がそれを得るべきですか(ダブルコンバージョン、gcc、ghc、他の人ですか?)

システムデータ:Gentoo Linux、gcc-4.4.5、ghc-7.0.4、cabal -1.10.2.0。

+0

'text-format'をインストールしようとすると、どんなエラーが発生しますか?おそらく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ファイルに私のシステムに弱い記号が含まれていません(GCC 4.5.2 & GHC 7.0.3/7.0のUbuntu Nattyでテストしました)。 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のどちらのバージョンを使用しますか? –