缺少C库:

时间:2017-04-21 20:46:27

标签: haskell ffi

我编写了一些简单的代码来调用C库中的函数。代码编译(以及类似的部分适用于标准C库)但是当我编译和链接时,ghc找不到C库。我的cabal文件是:

executable ttclient
main-is:    MainFFI4TT.hs
build-depends: base
default-language: Haskell2010
hs-source-dirs: src
other-modules:
Include-dirs: treetaggerSourceC 
Includes: tagger-api.h
extra-libraries: libtreetagger
extra-lib-dirs: /usr/lib 

文件libtreetagger.so位于/usr/lib但无法找到。还有什么需要什么?无论我使用stack build还是cabal install(8.0.2或8.0.1),都没有区别。 cabal是版本1.24.0.0,系统是linux debian stretch。

我更喜欢将库保留在用户目录而不是系统目录中。这可以实现吗?

haskell代码是:

foreign import ccall "tagger-api.h init_treetagger"    
    c_initTreeTagger :: CString -> IO ()   
    -- void init_treetagger(char *param_file_name);

mainFFItest :: IO ()
mainFFItest = do 

    c_initTreeTagger "german-utf8.par"

1 个答案:

答案 0 :(得分:5)

我假设您收到错误消息:

* Missing C library: libtreetagger

如果是这样,可能的问题是extra-libraries应该列出没有lib前缀的库:

extra-libraries: treetagger