我编写了一些简单的代码来调用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"
答案 0 :(得分:5)
我假设您收到错误消息:
* Missing C library: libtreetagger
如果是这样,可能的问题是extra-libraries
应该列出没有lib
前缀的库:
extra-libraries: treetagger