1
我写了一些简单的代码来调用C库中的函数。代码编译(以及类似的作品适用于标准的C库),但是当我编译和链接时,ghc找不到C库。我的小集团文件是:C库缺失:
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"
非常感谢!这是一个非常愚蠢的错误 - 但我没有看到文档中提到的任何内容?有人可以请添加一个提示!我将尝试用于FFI的两个wiki条目 - 但也许有人有更多的FFI经验应该这样做! – user855443
@ user855443它不是Haskell特有的。链接到'libfoo.so' /'libfoo.a'库总是使用'foo'作为名称(例如C中的'-lfoo')。 – ephemient