2013-02-21 16 views
5

zrobiłem powiązania FFI do C++ unordered_map (a.k.a. Hash_map) pojemnik i jego biblioteka otoki nazywa libstl.a. Po raz pierwszy dobrze działało. Ale po pewnym czasie nie udało się połączyć biblioteki z poniższymi komunikatami o błędach i nie wiem, dlaczego.łączące dodatkowych bibliotek/obiektów udało

$ 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 

kody źródłowe biblioteki znajduje się w https://github.com/comatose/stl-container. Każda pomoc zostanie doceniona.

Odpowiedz

1

miałem podobne problemy ładowanie plików .o do ghci. Z tego co rozumiem, problem polega na tym, że g ++ pozostawia "słabe symbole" w plikach .o, a ghci nie radzą sobie z nimi bardzo dobrze.

znalazłem wątek o tym z pomocnym Kontynuacja:

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

w którym proponowane rozwiązanie jest umieszczenie wszystko skompilowany przez g ++ w bibliotekach dzielonych (.so plików zamiast .a) i wydaje się, że rozwiązuje problem słabych symboli. Wspólne biblioteki mogą być trochę uciążliwe. Sugeruję, abyś spojrzał na libtool. Jest to program, pomocnika, który może obsługiwać wiele komplikacji:

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

+0

byłoby 'strip'ping te pliki .o pracować? – ocramz

+0

Minęło trochę czasu, odkąd na to patrzyłem. Nie sądzę, żeby strip był jakąkolwiek pomocą, ale nie jestem w 100% pewny. Wersje GHC 7.8 i nowsze wersje wydają się być w stanie załadować biblioteki ze słabymi symbolami, więc nie mają tego problemu. –