2016-05-08 18 views
5

Sto provando a creare una struttura dati che verrà esposta in Haskell, ma implementata in C++. Finora l'ho implementato in un file .cpp, dichiarato tutte le funzioni necessarie come extern "C" e aggiunto il file di origine al campo c-sources nel file .cabal. Quando costruisco il progetto (in questo caso con stack build) sembra costruire bene.Includere sorgenti C++ in un progetto Haskell

So che sta facendo qualcosa al file C++ perché non si compila se ci sono errori.

Devo ancora provare a eseguire il progetto perché è una libreria e finora non ha scritto nulla di "eseguibile", ma il repl non sembra funzionare.

Quando provo a eseguirlo (stack repl in questo caso) Ottengo un errore di simbolo mancante con un nome storpiato che può o non può riferirsi a un nome nel mio file.

unknown symbol `_ZdlPv' 
linking extra libraries/objects failed 

Come posso risolvere questo problema? Ho avuto un problema simile prima di aver risolto manualmente compilando il codice sorgente in una libreria dinamica e quindi utilizzando quella libreria nel mio progetto. Non voglio farlo poiché mi lega a una piattaforma e poiché non ha senso che un semplice C++ non possa essere compilato con il progetto usando gli strumenti che GHC ha già. Voglio essere in grado di mettere questo in hackage.

C'è qualcosa che mi manca? Se no, è un bug e ci sono piani per risolverlo?

+0

Si prega di aggiungere il messaggio di errore esatto e un [mcve]. – Zeta

+2

Ecco un esempio per un pacchetto cabal contenente sorgenti C++ https://github.com/jbransen/minisat-bundle/blob/master/minisat.cabal – d8d0d65b3f7cf42

+0

@Zeta Questo non è quel tipo di domanda. –

risposta

2

Ok, sono riuscito a "sistemarlo" per ora.

Ho aggiunto un file extra-libraries: stdc++-6, gcc_s_seh-1 al mio file cabal e ora funziona. Non ho idea se questa sia indipendente dalla piattaforma, ma quelle librerie vengono spedite con GHC quando la installo attraverso lo stack.

Problemi correlati