2016-05-08 3 views
5

Я пытаюсь создать структуру данных, которая будет отображаться в Haskell, но реализована на C++. До сих пор я реализовал его в файле .cpp, объявил все функции, которые мне нужны, как extern "C", и добавил исходный файл в поле c-sources в файле .cabal. Когда я строю проект (в этом случае с stack build), он, кажется, строит отлично.Включая источники C++ в проект Haskell

Я знаю, что он делает что-то в файл C++, потому что он не компилируется, если есть ошибки.

Мне еще нужно попробовать запустить проект, потому что это библиотека, и до сих пор у нее нет ничего «запущенного», но реплика не работает.

Когда я пытаюсь запустить его (stack repl в этом случае), я получаю недостающую ошибку символа с некоторым искаженным именем, которое может или не может ссылаться на имя в моем файле.

unknown symbol `_ZdlPv' 
linking extra libraries/objects failed 

Как исправить эту проблему? У меня была аналогичная проблема, прежде чем я исправил ее вручную, компилируя исходный код в динамическую библиотеку, а затем использую эту библиотеку в моем проекте. Я не хочу этого делать, поскольку он связывает меня с платформой, и поскольку нет никакого смысла в том, что простой C++ не может быть скомпилирован с проектом с помощью инструментов, которые GHC уже имеет. Я хочу, чтобы это можно было взломать.

Есть ли что-то, что мне не хватает? Если нет, это ошибка, и есть ли планы по ее исправлению?

+0

Пожалуйста, добавьте точное сообщение об ошибке и [mcve]. – Zeta

+2

вот пример пакета cabal, который содержит источники C++. Https://github.com/jbransen/minisat-bundle/blob/master/minisat.cabal – d8d0d65b3f7cf42

+0

@Zeta Это не тот тип вопроса. –

ответ

2

Хорошо, мне удалось «исправить» это сейчас.

Я добавил extra-libraries: stdc++-6, gcc_s_seh-1 в свой файл cabal и теперь он работает. Не знаю, является ли это независимой от платформы, но эти библиотеки поставляются с GHC, когда я устанавливаю его через стек.