2016-05-08 40 views
5

Próbuję utworzyć strukturę danych, która będzie wyświetlana w Haskell, ale zaimplementowana w C++. Do tej pory zaimplementowałem go w pliku .cpp, zadeklarowałem wszystkie potrzebne funkcje jako extern "C" i dodałem plik źródłowy do pola c-sources w pliku .cabal. Kiedy buduję projekt (w tym przypadku z stack build) wydaje się, że buduje się dobrze.Łącznie ze źródłami C++ w projekcie Haskell

Wiem, że to robi coś do pliku C++, ponieważ nie kompiluje się, jeśli występują błędy.

Muszę jeszcze spróbować uruchomić projekt, ponieważ jest to biblioteka i do tej pory nie zawiera niczego "działającego", ale replika nie działa.

Kiedy próbuję go uruchomić (stack repl w tym przypadku) otrzymuję brakujący błąd symbolu z jakąś zniekształconą nazwą, która może ale nie musi odnosić się do nazwy w moim pliku.

unknown symbol `_ZdlPv' 
linking extra libraries/objects failed 

Jak mogę rozwiązać ten problem? Miałem podobny problem, zanim naprawiłem go ręcznie, kompilując źródło do biblioteki dynamicznej, a następnie korzystałem z tej biblioteki w moim projekcie. Nie chcę tego robić, ponieważ wiąże mnie to z platformą i ponieważ nie ma sensu, aby proste C++ nie mogło zostać skompilowane z projektem przy użyciu narzędzi, które już posiada GHC. Chcę to włączyć w hackage.

Czy jest coś, czego mi brakuje? Jeśli nie, czy jest to błąd i czy planujesz go naprawić?

+0

Proszę podać dokładny komunikat o błędzie i [mcve]. – Zeta

+2

tutaj jest przykładem dla pakietu cabal, który zawiera źródła C++ https://github.com/jbransen/minisat-bundle/blob/master/minisat.cabal – d8d0d65b3f7cf42

+0

@Zeta To nie jest tego typu pytanie. –

Odpowiedz

2

Ok, udało mi się "naprawić" to na teraz.

Dodałem extra-libraries: stdc++-6, gcc_s_seh-1 do mojego pliku cabal i teraz to działa. Nie mam pojęcia, czy jest to platforma niezależna, ale te biblioteki są dostarczane z GHC, gdy instaluję je przez stos.