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