在Haskell中,我想通过inline-c-cpp的帮助调用boost C++库中的函数。
下载了
在
在 cabal 文件中:
代码编译无误。但是,当我在 GHCi 中运行 "main 1 1" 时,会出现错误。
下载了
boost
库后,我应该如何配置cabal
文件和stack.yaml
中的extra-lib-dirs
和extra-include-dirs
字段?在
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中使用它。
boost/math/special_functions
中调用owens_t
。 - Stéphane Laurent