我正在尝试使用来自 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 无法找到并加载依赖项本身。难道我做错了什么?
最佳答案
在您的情况下,可能不是 CFFI 而是 Windows DLL search rules 导致这种情况发生。
由于 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
环境变量,但 the way it's done is implementation dependent 。
关于windows - CFFI 不加载依赖库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22213133/