缺少C库:

use*_*443 1 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 
Run Code Online (Sandbox Code Playgroud)

该文件libtreetagger.so已存在/usr/lib但无法找到.还有什么需要什么?使用stack buildcabal 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"
Run Code Online (Sandbox Code Playgroud)

K. *_*uhr 6

我假设您收到错误消息:

* Missing C library: libtreetagger
Run Code Online (Sandbox Code Playgroud)

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

extra-libraries: treetagger
Run Code Online (Sandbox Code Playgroud)