MSVC2022 编译Curl库: 命令提示符构建了 curl.exe 和 libcurl.dll
cd curl-8.10.1\winbuild
nmake /f Makefile.vc mode=dll VC=22
libcurl-vc22-x64-release-dll-ipv6-sspi-schannel.zip 文件下载
https://bbs.lyvba.com/assets/files/2024-11-02/1730549962-774974-libcurl-vc22.zip
使用 Visual C++ 构建 curl (以下文章使用GPT翻译 curl-8.10.1\winbuild\README.md)
本文档描述了如何使用 Visual C++ 构建工具从源代码编译、构建和安装 curl 和 libcurl。要使用 VC++ 构建,您当然需要首先安装 VC++。VC++ 的最低要求版本是 6(属于 Visual Studio 6)。然而,强烈建议使用最新版本。
VC++ 也是 Windows 平台 SDK 的一部分。如果您只想构建 curl,则不必安装完整的 Visual Studio 或 Visual C++。
最新的 Platform SDK 可以从 Windows SDK and emulator archive 免费下载。
先决条件
如果您希望支持 zlib、OpenSSL、c-ares、ssh2,您需要单独下载它们并将它们复制到如下所示的 deps
目录:
somedirectory\
|_curl-src
| |_winbuild
|
|_deps
|_ lib
|_ include
|_ bin
也可以在其他随机位置创建 deps
目录,并使用 WITH_DEVEL
选项告诉 Makefile
其位置。
直接从 git 构建
当您从 git 检出代码并构建时,与从已发布的源代码归档相比,您需要首先运行 buildconf.bat
批处理文件(位于源代码根目录)来设置环境。
打开命令提示符
打开 Visual Studio 命令提示符:
使用 'Developer Command Prompt for VS [version]' 菜单项,其中 [version] 是 Visual Studio 版本。默认情况下,开发者提示符使用 x86 模式。需要调用 Vcvarsall.bat
来设置您想要的机器类型的提示符。并不是所有 Visual Studio 版本都有这种类型的命令提示符。
另请参见:Developer Command Prompt for Visual Studio 和 如何在命令行上启用 64 位、x64 托管 MSVC 工具集。
使用 'VS [version] [platform] [type] Command Prompt' 菜单项:其中 [version] 是 Visual Studio 版本,[platform] 是例如 x64,[type] 是本地或交叉平台构建。这种类型的命令提示符在所有 Visual Studio 版本中可能不存在。
另请参见:为命令行构建设置路径和环境变量。
在控制台中构建
进入控制台后,转到 Curl 源代码中的 winbuild 目录:
cd curl-src\winbuild
然后,您可以使用所需的选项调用 nmake /f Makefile.vc
(见下文)。构建将在顶级 src 目录的 builds\
目录中,使用 nmake 调用时给出的选项命名的目录中。
nmake /f Makefile.vc mode=<static or dll> <options>
其中 <options>
是以下一个或多个选项:
VC=<num>
- VC 版本。6 或更高版本。
WITH_DEVEL=<path>
- 开发文件的路径(SSL、zlib 等)。默认为兄弟目录:../deps
。
WITH_SSL=<dll/static>
- 启用 OpenSSL 支持,DLL 或静态链接。
WITH_NGHTTP2=<dll/static>
- 启用 HTTP/2 支持,DLL 或静态链接。
WITH_MSH3=<dll/static>
- 启用(实验性)HTTP/3 支持,DLL 或静态链接。
WITH_MBEDTLS=<dll/static>
- 启用 mbedTLS 支持,DLL 或静态链接。
WITH_CARES=<dll/static>
- 启用 c-ares 支持,DLL 或静态链接。
WITH_ZLIB=<dll/static>
- 启用 zlib 支持,DLL 或静态链接。
WITH_SSH=<dll/static>
- 启用 libssh 支持,DLL 或静态链接。
WITH_SSH2=<dll/static>
- 启用 libssh2 支持,DLL 或静态链接。
WITH_PREFIX=<dir>
- 构建的安装路径。
ENABLE_SSPI=<yes/no>
- 启用 SSPI 支持,默认为是。
ENABLE_IPV6=<yes/no>
- 启用 IPv6,默认为是。
ENABLE_IDN=<yes or no>
- 启用使用 Windows IDN API,默认为是。需要 Windows Vista 或更高版本。
ENABLE_SCHANNEL=<yes/no>
- 启用本地 Windows SSL 支持,默认为是(如果 SSPI 并且没有其他 SSL 库)。
ENABLE_OPENSSL_AUTO_LOAD_CONFIG=<yes/no>
- 启用自动加载 OpenSSL 配置,默认为是。
ENABLE_UNICODE=<yes/no>
- 启用 Unicode 支持,默认为否。
ENABLE_WEBSOCKETS=<yes/no>
- 启用 Web Socket 支持,默认为否。
GEN_PDB=<yes/no>
- 生成外部程序数据库(发布构建的调试符号)。
DEBUG=<yes/no>
- 调试构建。
MACHINE=<x86/x64/arm64>
- 目标架构(默认为 x86)。
CARES_PATH=<path>
- c-ares 的自定义路径。
MBEDTLS_PATH=<path>
- mbedTLS 的自定义路径。
NGHTTP2_PATH=<path>
- nghttp2 的自定义路径。
MSH3_PATH=<path>
- msh3 的自定义路径。
SSH2_PATH=<path>
- libssh2 的自定义路径。
SSL_PATH=<path>
- OpenSSL 的自定义路径。
ZLIB_PATH=<path>
- zlib 的自定义路径。
静态链接 Microsoft 的 C 运行时 (CRT)
如果您使用 mode=static
,则 nmake 将创建并链接到 libcurl 的静态构建,但 不 会链接静态 CRT。如果必须,您可以通过传递 RTLIBCFG=static
强制 nmake 链接静态 CRT。通常不建议使用该选项,nmake 默认为 DLL CRT。RTLIBCFG
很少使用,因此也很少测试。当为已经构建但未使用该选项的配置传递 RTLIBCFG
,或如果选项指定得不同,您必须销毁包含该配置的构建目录,以便 nmake 可以从头开始构建。
除非您有足够的开发经验知道如何匹配运行时库(也就是 CRT),否则不建议使用此选项。如果 RTLIBCFG=static
,则发布构建使用 /MT
,调试构建使用 /MTd
。
使用 libcurl 构建您自己的应用程序(Visual Studio 示例)
当您构建 curl 和 libcurl 时,nmake 会显示输出目录的相对路径。输出目录的名称由 nmake 在构建时使用的选项命名。您可能还会看到同名的临时目录,但带有后缀 -obj-curl 和 -obj-lib。
例如,假设您从 Visual Studio 2010 x64 Win64 命令提示符构建了 curl.exe 和 libcurl.dll:
nmake /f Makefile.vc mode=dll VC=10
输出目录将具有类似于 ..\builds\libcurl-vc10-x64-release-dll-ipv6-sspi-schannel
的名称。
输出目录包含子目录 bin、lib 和 include。这些是您在 Visual Studio 项目中设置的目录。您可以将输出目录复制到项目中或保留在原处。根据示例,假设您保留它不变,并且您的 curl 顶级源目录是 C:\curl-7.82.0
。您将为使用 x64 平台的配置设置以下选项:
- 配置属性 > 调试 > 环境
PATH=C:\curl-7.82.0\builds\libcurl-vc10-x64-release-dll-ipv6-sspi-schannel\bin;%PATH%
- C/C++ > 常规 > 额外包含目录
C:\curl-7.82.0\builds\libcurl-vc10-x64-release-dll-ipv6-sspi-schannel\include;
- 链接器 > 常规 > 额外库目录
C:\curl-7.82.0\builds\libcurl-vc10-x64-release-dll-ipv6-sspi-schannel\lib;
- 链接器 > 输入 > 额外依赖项
libcurl.lib;
对于使用 x86 平台(也称为 Win32 平台)的配置,您需要单独构建 libcurl 的 x86 版本。
如果您构建 libcurl 静态 (mode=static
) 或调试 (DEBUG=yes
),则库名称会有所不同,并且可能需要为同一平台下项目的不同配置进行单独构建。下一节将讨论这一点。
使用静态 libcurl 构建您自己的应用程序
在 Windows 上构建使用静态 libcurl 库的应用程序时,您必须定义 CURL_STATICLIB
。否则,链接器将查找动态导入符号。
静态库名称的基名带有 _a
后缀,调试库名称的基名带有 _debug
后缀。例如,libcurl_a_debug.lib
是一个静态调试构建的 libcurl。
您可能需要为每个 VC 配置组合(例如:Debug|Win32、Debug|x64、Release|Win32、Release|x64)进行单独的 libcurl 构建。
您必须指定静态 libcurl 的构建所需的任何额外依赖项(例如:advapi32.lib;crypt32.lib;normaliz.lib;ws2_32.lib;wldap32.lib
)。
旧版 Windows 和 SSL
当您使用该目录中的构建文件构建 curl 时,默认的 SSL 后端将是 Schannel(Windows SSPI),这是 Windows 操作系统自带的本地 SSL 库。在 Windows <= XP 中,Schannel 无法连接到不再支持旧版握手和算法的服务器。如果您将在较早版本的 Windows 中使用 curl,则应该选择其他 SSL 后端,如 OpenSSL。