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.dllc:\cygwin64\lib\lapack一样,它可能具有的任何依赖项都是从同一目录、当前目录、Windows 目录和PATH.

如果您c:\cygwin64\bin的路径中没有,则无法找到 DLL。cffi::*foreing-library-directories*不影响 Windows 功能;LoadLibraryCFFI 只是使用 DLL 的完整路径执行调用。

作为一种解决方案,我建议您配置您的目录PATH以包含该c:\cygwin64\bin目录,这在任何情况下都是一个好主意。或者,您可以PATH在调用 之前修改代码中的环境变量load-foreign-library,但完成方式取决于实现

于 2014-03-06T06:16:32.267 回答