2014-03-06 2 views
3

SBCL에서 BLAS/LAPACK 라이브러리를 사용하려고합니다. 특히 LLA 패키지를 실행하려고합니다. 로드 할 BLAS 공유 라이브러리를 가져 오는 데 많은 어려움을 겪고있었습니다. 결국 종속 라이브러리를로드 할 수 없다는 것을 발견했습니다. 결국 나는 수동으로 종속성로드 모두에서 BLAS를로드 할 수 있었다 :CFFI가 종속 라이브러리를로드하지 않습니까?

(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 외국 라이브러리는 찾을 수 없습니다 종속성 자체를로드하십시오. 내가 뭔가 잘못하고 있는거야?

답변

4

아마도 CFFI가 아니지만 Windows DLL search rules 일 수 있습니다.

cygblas-0.dllc:\cygwin64\lib\lapack 디렉토리에 있으며, 동일한 디렉토리, 현재 디렉토리, Windows 디렉토리 및 PATH에서 찾을 수있는 모든 종속성이 검색됩니다.

경로에 c:\cygwin64\bin이 없으면 DLL을 찾을 수 없습니다. cffi::*foreing-library-directories*은 Windows 기능에 영향을주지 않습니다. CFFI는 단순히 DLL에 대한 전체 경로와 함께 LoadLibrary에 대한 호출을 실행합니다.

해결책으로, c:\cygwin64\bin 디렉토리를 포함하도록 PATH을 구성하는 것이 좋습니다. 어쨌든 좋습니다. 또는 load-foreign-library을 호출하기 전에 코드에서 PATH 환경 변수를 수정할 수 있지만 the way it's done is implementation dependent입니다.

+0

응답 해 주셔서 감사합니다. 필자는 cffi : * foreign-library-directories * 디렉토리를로드 검색 경로에 추가한다고 가정했으나 그렇지 않은 경우 문제를 설명합니다. –

관련 문제