2013-02-21 11 views
5

I FFI Bindungen gemacht C++ unordered_map (a.k.a. Hash_map) Container und seine Wrapperbibliothek libstl.a genannt. Beim ersten Mal ist es verwendet, um gut zu funktionieren. Aber nach einiger Zeit ist es nicht gelungen, die Bibliothek mit den folgenden Fehlermeldungen zu verknüpfen, und ich kann nicht herausfinden, warum.Verknüpfung zusätzliche Bibliotheken/Objekte fehlgeschlagen

$ 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 

Quellcodes für die Bibliothek befinden sich in https://github.com/comatose/stl-container. Jede Hilfe wird geschätzt.

Antwort

1

Ich habe ähnliche Probleme gehabt Dateien in GHCI Laden .o. Von dem, was ich verstehe, ist das Problem, dass g ++ Blätter ‚schwache Symbole‘ in .o Dateien und GHCI nicht sehr gut mit ihnen befassen.

fand ich einen Thread über sie mit einem hilfreichen Follow-up:

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

, in dem die vorgeschlagene Lösung ist alles von g ++ in Shared Libraries (.so-Dateien statt .a) zusammengestellt setzen und das scheint das schwache Symbolproblem zu klären. Gemeinsame Bibliotheken können ein bisschen Schmerz sein. Ich schlage vor, dass du libtool ansiehst. Es ist ein Hilfsprogramm, das viele der Komplikationen behandeln kann:

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

+0

würde 'strip'ping die .o-Dateien arbeiten? – ocramz

+0

Es ist schon eine Weile her, seit ich das sah. Ich glaube Strip ist keine Hilfe, aber ich bin mir nicht 100% sicher. Versionen von GHC 7.8 und später scheinen in der Lage zu sein, Bibliotheken zu laden mit schwachen Symbolen, damit sie nicht über dieses Problem. –