在 Haskell 中,我想从 boost C++ library 调用一个函数在inline-c-cpp的帮助下.
下载boost
库后,如何配置cabal
文件以及extra-lib-dirs
和extra字段-include-dirs
在 stack.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/