CFFI ne charge pas les bibliothèques dépendantes?

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 .