2016-05-08 5 views
5

Ich versuche, eine Datenstruktur zu erstellen, die in Haskell verfügbar gemacht wird, aber in C++ implementiert. Bisher habe ich es in eine .cpp Datei implementiert, deklarierte alle Funktionen, die ich brauche als extern "C" und fügte die Quelldatei zum c-sources Feld in der .cabal Datei hinzu. Wenn ich das Projekt (in diesem Fall mit stack build) baue, scheint es gut zu bauen.Einschließlich C++ - Quellen in einem Haskell-Projekt

Ich weiß, es tut etwas in die C++ - Datei, weil es nicht kompiliert, wenn es Fehler gibt.

Ich habe noch zu versuchen, das Projekt auszuführen, weil es eine Bibliothek ist und bis jetzt hat es nichts "runnable" geschrieben, aber das Repl scheint nicht zu funktionieren.

Wenn ich versuche, es (stack repl in diesem Fall) zu starten, erhalte ich einen fehlenden Symbolfehler mit einem verstümmelten Namen, der sich möglicherweise auf einen Namen in meiner Datei bezieht.

unknown symbol `_ZdlPv' 
linking extra libraries/objects failed 

Wie kann ich dieses Problem beheben? Ich hatte zuvor ein ähnliches Problem, das ich behoben habe, indem ich die Quelle manuell in eine dynamische Bibliothek kompiliert und dann diese Bibliothek in meinem Projekt verwendet habe. Ich möchte das nicht tun, da es mich mit einer Plattform verbindet und da es keinen Sinn macht, dass ein einfaches C++ nicht mit den Tools, die GHC bereits besitzt, mit dem Projekt kompiliert werden kann. Ich möchte das auf Hacker setzen können.

Gibt es etwas, das mir fehlt? Wenn nicht, ist es ein Fehler und gibt es Pläne, es zu beheben?

+0

Bitte fügen Sie die genaue Fehlermeldung und ein [MCVE]. – Zeta

+2

hier ist ein Beispiel für ein Cabal-Paket, das C++ - Quellen enthält https://github.com/jbransen/minisat-bundle/blob/master/minisat.cabal – d8d0d65b3f7cf42

+0

@Zeta Dies ist nicht diese Art von Frage. –

Antwort

2

Ok, ich habe es geschafft, das jetzt zu "reparieren".

Ich habe eine extra-libraries: stdc++-6, gcc_s_seh-1 zu meiner Cabal-Datei hinzugefügt und jetzt funktioniert es. Keine Ahnung, ob dies plattformunabhängig ist, aber diese Bibliotheken werden mit GHC ausgeliefert, wenn ich sie über den Stack installiere.