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

3
在Haskell中,我想通过inline-c-cpp的帮助调用boost C++库中的函数。
下载了boost库后,我应该如何配置cabal文件和stack.yaml中的extra-lib-dirsextra-include-dirs字段?
cabal文件中,我写入:extra-libraries: boost,并尝试了extra-lib-dirsextra-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中使用它。


@n.m. 好的,谢谢。我想在 boost/math/special_functions 中调用 owens_t - Stéphane Laurent
owens_t 是一个仅限模板的函数,不属于任何可链接的库。 - n. m.
不,这意味着您没有任何库可链接。您只需要指定“extra-include-dirs”。 - n. m.
好的,谢谢。我会尝试的。 - Stéphane Laurent
@n.m. 这个可以在 ghc 8.2.1 上运行!! :-) - Stéphane Laurent
显示剩余3条评论
1个回答

0

编辑中发布的代码在使用ghc 8.2.1的GHCi中可以运行。

Prelude Main> main 0.5 0.5
Hello, Owen! 0.0644886

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