5

C ++ unordered_map(別名hash_map)コンテナーとそのラッパーライブラリへのFFIバインディングを作成しましたlibstl.a。当初はうまく機能していました。しかし、ある時点以降、ライブラリを次のエラーメッセージにリンクできず、理由がわかりません。

$ 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にあります。どんな助けでもありがたいです。

4

1 に答える 1

1

.o ファイルを ghci にロードする際にも同様の問題がありました。私が理解していることから、問題は g++ が .o ファイルに「弱いシンボル」を残し、ghci がそれらをうまく処理できないことです。

私はそれについての有用なフォローアップでスレッドを見つけました:

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

提案された解決策は、g++ によってコンパイルされたすべてのものを共有ライブラリ (.a の代わりに .so ファイル) に入れることであり、それは弱いシンボルの問題を解決するようです。共有ライブラリは少し面倒です。libtool を見ることをお勧めします。これは、多くの複雑な問題を処理できるヘルパー プログラムです。

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

于 2013-05-21T21:57:13.837 に答える