2014-03-06 45 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:負載外商庫是無法找到並加載依賴關係本身。難道我做錯了什麼?

回答

4

在你的情況下,它可能不是CFFI,但Windows DLL search rules,使這種情況發生。

由於cygblas-0.dll是在c:\cygwin64\lib\lapack目錄,它可能有任何依賴關係是從同一個目錄,在當前目錄中,Windows目錄搜索,並從PATH。如果在路徑中沒有c:\cygwin64\bin,則找不到DLL。 cffi::*foreing-library-directories*不影響Windows功能; CFFI只需用DLL的完整路徑執行對LoadLibrary的調用。

作爲解決方案,我建議你配置你的PATH以包含c:\cygwin64\bin目錄,這在任何情況下都是一個好主意。或者,您可以在調用load-foreign-library之前修改代碼中的PATH環境變量,但the way it's done is implementation dependent

+0

感謝您的回覆。我曾假設向cffi添加目錄:* foreign-library-directories *會將它們添加到加載搜索路徑,但如果不是這樣可以解釋問題。 –