链接额外的库/对象失败

时间:2013-02-21 14:11:44

标签: haskell ffi ghci

我对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 个答案:

答案 0 :(得分:1)

我在将.o文件加载到ghci时遇到了类似的问题。据我所知,问题是g ++在.o文件中留下了“弱符号”,而ghci并没有很好地处理它们。

我找到了一个关于它的帖子并提供了有用的跟进:

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

其中建议的解决方案是将g ++编译的所有内容放入共享库(.so文件而不是.a),这似乎可以解决弱符号问题。共享库可能有点痛苦。我建议你看一下libtool。这是一个可以处理许多复杂问题的帮助程序:

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