2013-02-21 87 views
5

我做了FFI綁定到C++ unordered_map(a.k.a。hash_map)容器和它的包裝庫名爲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。 任何幫助將不勝感激。

回答

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/

+0

將'strip'ping .o文件的工作? – ocramz 2015-03-22 19:26:33

+0

我看了這個已經有一段時間了。我不認爲脫衣舞有任何幫助,但我不是100%確定的。 GHC 7.8和更高版本的版本似乎能夠加載弱符號的庫,所以它們沒有這個問題。 – 2015-12-07 20:04:17