c++ - 将 C++ 库 (boost) 与 inline-c-cpp 结合使用

标签 c++ haskell boost ffi

在 Haskell 中,我想从 boost C++ library 调用一个函数在inline-c-cpp的帮助下.

下载boost库后,如何配置cabal文件以及extra-lib-dirsextra字段-include-dirsstack.yaml 中?

cabal 文件中,我写了:extra-libraries: boost,我在 extra-lib-dirs 中尝试了几个文件夹和 extra-include-dirs,但我总是得到 Missing C library: boost

编辑

这是我在@n.m. 的评论之后的尝试。在 stack.yaml 中:

extra-include-dirs:
- U:\Data\C\boost_1_64_0

在 cabal 文件中:

  extra-libraries:     stdc++
  c-sources:           src/Main.cpp

我的模块:

{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE ForeignFunctionInterface #-}

module Main
  where
import qualified Language.C.Inline.Cpp as C

C.context C.cppCtx

C.include "<iostream>"
C.include "<boost/math/special_functions/owens_t.hpp>"

main :: C.CDouble -> C.CDouble -> IO ()
main h a = do
  [C.block| void {
      std::cout << "Hello, Owen! " << boost::math::owens_t($(double h), $(double a)) << std::endl;
    } |]

代码编译没有问题。但是,当我在 GHCi 中运行 main 1 1 时,出现错误

ghc.exe: C:\HaskellProjects\inlinecpp\.stack-work\install\e77882c1\lib\x86_64-windows-ghc-8.0.2\inlinecpp-0.1.0.0-IWaed3tDnUhE52nToDO1Sq\HSinlinecpp-0.1.0.0-IWaed3tDnUhE52nToDO1Sq.o: unknown symbol `_Unwind_Resume'

编辑

如果我这样做并运行一个可执行文件,这会起作用。但我想在 GHCi 中使用它。

最佳答案

Edit 中发布的代码适用于带有 ghc 8.2.1 的 GHCi。

Prelude Main> main 0.5 0.5
Hello, Owen! 0.0644886

关于c++ - 将 C++ 库 (boost) 与 inline-c-cpp 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44747472/

相关文章:

c++ - 无法检测图像的水平线

haskell - 没有因使用 `sqrt` 而产生的 (Floating Int) 实例

c++ - 在运行时 boost 异常

c++ - 使用 boost copy 将结构体成员作为键映射复制到集合容器中

Boost程序选项检测是否使用默认值

c++ - Boost序列化无法恢复保存的对象

c++ - 计算两个四边形交点的方法?

haskell - 将 "Why Functional Programming Matters"翻译成 Haskell

parsing - 使用 Haskell 的 Parsec 进行编程语言转换器

c++ - 继承相关的c++编译错误