CFFI не загружает зависимые библиотеки?
Я пытаюсь использовать библиотеки BLAS/LAPACK из SBCL (в частности, пытаюсь запустить пакет 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 не может найти и загрузить зависимости самостоятельно. Я делаю что-то неправильно?
1 ответ
В вашем случае это, вероятно, не 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
, но способ, которым это сделано, зависит от реализации.