我正在回答我自己的问题,因为最终我设法解决了问题,并希望这个问题对其他人有用。这实际上似乎是一个常见问题,尽管我找不到任何地方可以明确地解决这个问题,并且对于新手(像我一样)来说。
该问题是由于 libcurl 基于 openSSL 造成的。 OpenSSL 是 Unix/Linux 的东西,不能在 Windows 上工作,除非显式安装适用于 Windows 的 openSSL(未经测试)。但人们可能不想强迫其软件的用户安装任何其他组件,例如 openSSL - 就像我的情况一样。
解决方案是构建一个不基于 openSSL 而是基于 Windows SSPI 的 libcurl,或者找到合适的 libcurl 包。经过一番努力和搜索,我发现MSYS2上存在这样一个包,它是mingwcurlwinssl:
https://packages.msys2.org/package/mingw-w64-x86_64-curl-winssl?repo=mingw64 https://packages.msys2.org/package/mingw-w64-x86_64-curl-winssl?repo=mingw64
安装它就足够了:
pacman -S mingw-w64-x86_64-curl-winssl
与 libcurl 静态链接可能会很麻烦,而且看起来并没有清楚地列出所有依赖项(似乎是一个已知的错误)。特别是如果使用像我这样的 IDE 并且对 Linux 命令行一无所知(我使用的是 Code::Blocks),则有必要链接以下库:
-lcurl -lpsl -lidn2 -lssh2 -lbrotlidec -lz -liconv -lzstd -lbrotlicommon -lunistring -lbcrypt -lws2_32 -lwldap32 -lcrypt32
and
#define CURL_STATICLIB
(强制的)
最后一点,我必须说,在任何 minGW 发行版中,恕我直言,libcurl 默认情况下应该基于 Windows,而不是基于 openSSL,因为它们被认为可以在 Windows 下工作并生成 Windows 可执行文件 - 但由于某些原因对我来说很模糊,这似乎情况并非总是如此。