4

SBCL の BLAS/LAPACK ライブラリを使用しようとしています (具体的には、LLAパッケージを実行しようとしています)。BLAS 共有ライブラリをロードするのに苦労しました。最終的に、依存ライブラリをロードできないことがわかりました。最終的に、すべての依存関係を手動でロードすることで、BLAS をロードすることができました。

(setq cffi::*foreign-library-directories* '("C:/cygwin64/bin/" "C:/cygwin64/lib/lapack/"))
(CFFI:LOAD-FOREIGN-LIBRARY "CYGWIN1.DLL")
(CFFI:LOAD-FOREIGN-LIBRARY "CYGGCCC_S-SEH-1.DLL")
[..etc..]
(CFFI:LOAD-FOREIGN-LIBRARY "CYGBLAS-0.dll")

回避策として、これはひどいことではありませんが、CFFI:LOAD-FOREIGN-LIBRARY が依存関係自体を見つけてロードできない理由がわかりません。私は何か間違ったことをしていますか?

4

1 に答える 1

5

あなたの場合、おそらくCFFIではなく、これを実現するWindows DLL検索ルールです。

cygblas-0.dllディレクトリ内と同様c:\cygwin64\lib\lapackに、そのディレクトリ、現在のディレクトリ、Windows ディレクトリ、およびPATH.

パスにない場合c:\cygwin64\bin、DLL は見つかりません。cffi::*foreing-library-directories*Windows の機能には影響しません。CFFI はLoadLibrary、DLL へのフル パスを指定して呼び出しを実行するだけです。

PATH解決策として、ディレクトリを含めるように構成することをお勧めします。c:\cygwin64\binこれは、いずれにしても良い考えです。PATHまたは、 を呼び出す前にコード内の環境変数を変更することもできますload-foreign-library、その方法は実装に依存します。

于 2014-03-06T06:16:32.267 に答える