缺少 C 库:

Missing C library:

我写了一些简单的代码来调用 C 库中的函数。代码编译(并且类似的部分适用于标准 C 库)但是当我编译并且 link 时,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 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"

我假设您收到了错误消息:

* Missing C library: libtreetagger

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

extra-libraries: treetagger