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の2つのwikiエントリを試してみますが、おそらくFFIの経験が豊富な人がこれを行うべきです! – user855443
@ user855443ハスケル特有のものではありません。 'libfoo.so' /' libfoo.a'ライブラリへのリンクは、常に 'foo'を名前として使用して行われます(C言語の' -lfoo'など)。 – ephemient