2013-02-21 4 views
5

C++のunordered_map(a.k.a.hash_map)コンテナおよびそのラッパーライブラリlibstl.aにFFIバインディングを行いました。 最初は、うまく動作していました。しかし、いくつかの点の後で、それはライブラリを次のエラーメッセージとリンクさせることができず、なぜ私は理解できません。余分なライブラリ/オブジェクトのリンクに失敗しました

$ ghci -L. -lstl -lstdc++ 
GHCi, version 7.6.2: http://www.haskell.org/ghc/ :? for help 
Loading package ghc-prim ... linking ... done. 
Loading package integer-gmp ... linking ... done. 
Loading package base ... linking ... done. 
Loading object (static archive) ./libstl.a ... done 
Loading object (dynamic) /usr/lib/gcc/x86_64-linux-gnu/4.7/libstdc++.so ... done 
final link ... ghc: ./libstl.a: unknown symbol `_ZZNKSt8__detail20_Prime_rehash_policy11_M_next_bktEmE10__fast_bkt' 
linking extra libraries/objects failed 

ライブラリのソースコードは、https://github.com/comatose/stl-containerにあります。 助けていただければ幸いです。

答えて

1

ghciに.oファイルを読み込むのと同様の問題がありました。私が理解しているところでは、問題はg ++が.oファイルに「weak symbol」を残し、ghciがそれらをうまく処理しないということです。

は私が役に立つのフォローアップとそれについてのスレッドを発見した:提案された解決策は、(代わり.Aの.soファイル)共有ライブラリにG ++でコンパイルしたすべてのものを置くことです

http://www.haskell.org/pipermail/haskell-cafe/2012-March/099926.html

しますそれは弱い記号の問題を解決するようです。共有ライブラリは少し苦しいことがあります。 libtoolを見ることをお勧めします。これは、合併症の多くを扱うことができるヘルパープログラムです:

http://www.gnu.org/software/libtool/

+0

は '.oファイルが動作しstrip'pingでしょうか? – ocramz

+0

私はこれを見てからしばらくしています。私はストリップが助けとは思わなかったが、私は100%確実ではない。 GHC 7.8以降のバージョンでは、弱いシンボルでライブラリをロードできるようであるため、この問題は発生しません。 –

関連する問題