在Haskell项目中包含C++源代码

5
我正在尝试创建一个数据结构,它将在Haskell中公开,但是在C++中实现。到目前为止,我已经在一个.cpp文件中实现了它,将我需要的所有函数声明为extern "C",并将源文件添加到.cabal文件的c-sources字段中。当我构建项目(在这种情况下使用stack build)时,似乎构建得很好。
我知道它正在对C++文件进行某些操作,因为如果有错误,它就无法编译。
我还没有尝试运行该项目,因为它是一个库,到目前为止还没有编写任何可运行的内容,但repl似乎不起作用。
当我尝试运行它(在这种情况下是stack repl),我会收到一个缺少符号错误,其中包含一些可能或可能不是指向我的文件中名称的搞乱了的名称。
unknown symbol `_ZdlPv'
linking extra libraries/objects failed

我该如何解决这个问题?我之前遇到过类似的问题,当时我将源代码手动编译成动态库,并在项目中使用该库解决了问题。但是我不想这样做,因为这会将我与平台绑定,而且使用 GHC 工具本应该能够轻松地编译一个简单的 C++ 代码。我希望能够把这个程序放在 Hackage 上。
我是否遗漏了什么?如果没有,这是一个 bug 吗?有计划修复吗?

请添加精确的错误信息和一个 [mcve]。 - Zeta
2
这是一个包含C++源代码的cabal软件包示例:https://github.com/jbransen/minisat-bundle/blob/master/minisat.cabal - d8d0d65b3f7cf42
@Zeta 这不是那种问题。 - Luka Horvat
1
@d8d0d65b3f7cf42 是的,我觉得我遇到的问题是缺少 extra-libraries: stdc++,但当我添加它时,它仍然无法工作。报告找不到库。我认为这是Windows上GHCi的错误。 - Luka Horvat
1个回答

2

好的,我现在已经“修复”了这个问题。

我在我的cabal文件中添加了extra-libraries: stdc++-6, gcc_s_seh-1,现在它可以工作了。不知道这是否与平台无关,但是当我通过stack安装GHC时,这些库确实会被一起安装。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接