无法在Windows 10上将libcurl与cffi一起使用

无法在Windows 10上将libcurl与cffi一起使用,windows,common-lisp,msys2,cffi,Windows,Common Lisp,Msys2,Cffi,我在Windows 10上玩CFFI,并使用msys2安装了libcurl-devel包。我在目录c:\msys2\usr\lib\中找到了一个文件libcurl.dll.a,并使用以下方法将该目录添加到*外部库目录*: 但如果我尝试使用外部库libcurl,则会出现以下错误: Unable to load foreign library (LIBCURL). Error opening shared object "libcurl.dll" 我错过了什么?我试图直接指向libcurl.d

我在Windows 10上玩CFFI,并使用msys2安装了libcurl-devel包。我在目录c:\msys2\usr\lib\中找到了一个文件libcurl.dll.a,并使用以下方法将该目录添加到*外部库目录*:

但如果我尝试使用外部库libcurl,则会出现以下错误:

Unable to load foreign library (LIBCURL).
  Error opening shared object "libcurl.dll"
我错过了什么?我试图直接指向libcurl.dll.a,但错误保持不变:

(define-foreign-library libcurl
      (:darwin (:or "libcurl.3.dylib" "libcurl.dylib"))
      (:unix (:or "libcurl.so.3" "libcurl.so"))
      (t "libcurl.dll.a"))
以下是教程中给出的完整代码:

(asdf:load-system :cffi)

 ;;; Nothing special about the "CFFI-USER" package.  We're just
 ;;; using it as a substitute for your own CL package.
(defpackage :cffi-user
  (:use :common-lisp :cffi))

(in-package :cffi-user)

(pushnew #P"c:/msys64/usr/lib/" *foreign-library-directories*
         :test #'equal)

(define-foreign-library libcurl
  (:darwin (:or "libcurl.3.dylib" "libcurl.dylib"))
  (:unix (:or "libcurl.so.3" "libcurl.so"))
  (t (:default "libcurl")))

(use-foreign-library libcurl)
编辑

我使用的是portacle包中的SBCL 1.4.16

编辑2

只是为了完整。如果我将“定义外部库”更改为

错误会发生变化:

Unable to load foreign library (LIBCURL).
  Error opening shared object "c:\\msys64\\usr\\lib\\libcurl.dll.a":
 %1 ist keine zulässige Win32-Anwendung.
据我所知,至少找到了该文件,但似乎格式不对。我没有找到关于cffi的dynamic.dll和static.dll.a文件之间差异的任何进一步信息,目前没有资源进一步研究这一点。

请尝试加载外部库,而不是使用“使用外部库”。这是较低级别的代码,但它允许您试验文件和路径

还可以使用cygcheck确定libcurl.dll依赖于什么。然后确保已安装组件,并且它们位于路径中


最后,检查libcurl.dll在MSYS2中的位置。在我的系统上,它位于/c/msys64/mingw64/bin/libcurl-4.dll中,您使用的是哪个64位的Lisp?我怀疑它想要的是.dll而不是.a…?这是最明显的结论。我会看看我什么时候能找到时间再次与Windows打交道。如果我使用load foreign library Pc:/msys64/usr/lib/libcurl.dll.a,我仍然会遇到同样的错误。我必须看看我是否真的想深入研究.dll和.dll.a文件之间的差异,以及为什么mysys2会安装后者等等。在我的系统上,我在/c/msys64/mingw64/bin/libcurl-4.dll中有libcurl。也许值得一试。这似乎有效!由于我的知识有限,我希望图书馆不在bin目录中,并且一直在错误的地方寻找。如果你把它作为一个答案发布,我会很高兴地接受这个答案。我澄清了我的原始帖子,在bin子目录中查找libcurl
(define-foreign-library libcurl
  (:darwin (:or "libcurl.3.dylib" "libcurl.dylib"))
  (:unix (:or "libcurl.so.3" "libcurl.so"))
  (t "libcurl.dll.a"))
Unable to load foreign library (LIBCURL).
  Error opening shared object "c:\\msys64\\usr\\lib\\libcurl.dll.a":
 %1 ist keine zulässige Win32-Anwendung.