J’essaie d’utiliser les bibliothèques BLAS / LAPACK de SBCL (en essayant spécifiquement d’exécuter le package LLA ). J’ai eu beaucoup de problèmes pour charger la bibliothèque partagée BLAS; Finalement, j’ai découvert qu’il n’était pas capable de charger ses bibliothèques dépendantes. Finalement, j’ai pu charger BLAS en chargeant toutes ses dépendances manuellement:
(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")
Comme solution de contournement, ce n’est pas terrible, mais je ne comprends pas pourquoi CFFI: LOAD-FOREIGN-LIBRARY n’est pas capable de trouver et de charger les dépendances. Est-ce que je fais quelque chose de mal?
Dans votre cas, ce ne sont probablement pas des règles de recherche CFFI mais Windows DLL qui rendent cela possible.
Comme cygblas-0.dll
trouve dans le cygblas-0.dll
c:\cygwin64\lib\lapack
, toutes les dépendances peuvent être recherchées dans le même répertoire, le répertoire en cours, les répertoires Windows et PATH
.
Si vous n’avez pas c:\cygwin64\bin
dans votre chemin, les DLL sont introuvables. cffi::*foreing-library-directories*
n’affecte pas la fonctionnalité Windows; CFFI exécute simplement un appel à LoadLibrary
avec un chemin complet vers la DLL.
Comme solution, je vous suggère de configurer votre PATH
pour inclure le c:\cygwin64\bin
, ce qui est une bonne idée dans tous les cas. Vous pouvez également modifier la variable d’environnement PATH
dans votre code avant l’appel à load-foreign-library
, mais la manière dont elle est effectuée dépend de l’implémentation .