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

Unable to use libcurl with cffi on Windows 10

我正在 Windows 10 上玩 CFFI tutorial 并使用 msys2 安装了 libcurl-devel 包。我在目录 c:\msys2\usr\lib\ 中找到了一个文件 libcurl.dll.a,并使用以下命令将此目录添加到 *foreign-library-directories*

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

但是如果我尝试 (use-foreign-library 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

只是为了完整起见。如果我将 define-foreign-library 更改为

(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.

据我所知,至少找到了文件,但格式似乎不正确。我没有找到关于 cffi 的动态 (.dll) 和静态 (.dll.a) 文件之间差异的任何进一步信息,目前没有资源来进一步调查这一点。

尝试加载 load-foreign-library,而不是使用 use-foreign-library。它是较低级别的代码,但可以让您试验文件和路径。

还可以使用 cygcheck 找出 libcurl.dll 所依赖的内容。然后确保安装了组件,并且它们位于 PATH.

最后,检查 libcurl.dll 在您的 MSYS2 中的位置。在我的系统上它位于 /c/msys64/mingw64/bin/libcurl-4.dll