2013-02-21 17 views
5

FFI bağlamaları C++ unordered_map (a.k.a. Hash_map) kapsayıcısına ve libstl.a adlı sarıcı kitaplığına yaptım. İlk defa, iyi çalışırdı. Ancak bir noktadan sonra, kütüphaneyi aşağıdaki hata mesajlarıyla ilişkilendiremedi ve nedenini anlayamadım.Ek kütüphaneleri/nesneleri birbirine bağlama başarısız oldu

$ 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 

Kitaplık için Kaynak Kodları https://github.com/comatose/stl-container içinde bulunur. Herhangi bir yardım takdir edilecektir.

cevap

1

.o dosyalarını ghci'ye yüklerken benzer sorunlar yaşadım. Anladığım kadarıyla sorun, g ++ 'nun .o dosyalarındaki' zayıf sembolleri 'bırakması ve ghci'nin bunlarla çok iyi başa çıkmamasıdır.

Ben yararlı takibi ile bu konuda bir iplik bulundu: Önerilen çözüm (yerine .a dosyalarına .bu) paylaşılan kütüphaneleri içine g ++ tarafından derlenen her şeyi koymaktır

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

hangi ve bu zayıf sembol problemini temizliyor gibi görünüyor. Paylaşılan kütüphaneler biraz acı verebilir. Libtool'a bakmanı öneririm.

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

+0

'.o dosyaları çalışmak strip'ping olacaktır: Bu komplikasyonlar çok işleyebilir bir yardımcı programını mı? – ocramz

+0

Buna baktığımdan beri biraz zaman geçti. Strip'in herhangi bir yardım olduğunu sanmıyorum ama% 100 emin değilim. GHC 7.8 ve üstü sürümleri, zayıf sembollere sahip kütüphaneleri yükleyebildiğinden, bu problemleri yoktur. –