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