从源代码编译最新版 cURL
您是否希望从源代码构建最新的 cURL?
操作系统自带的 cURL 版本可能不是最新的。如果您的项目需要特定功能的最新版本,则需要从源代码进行编译。
最近,我在 CentOS 上尝试使用默认的 cURL 版本测试 HTTP/3,但未能成功。顺便说一句,cURL 的功能远不止于此。
curl --version
curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.44 zlib/1.2.7 libidn/1.28 libssh2/1.8.0
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz unix-sockets
然而,最新的 cURL 版本(例如 7.67)支持 HTTP/3。因此,我不得不选择从源代码构建。这只是一个例子,您可能还有其他需求。
以下示例适用于 CentOS 8.x 和 Ubuntu 20.x 上的 7.67 版本(这是我当时使用的最新版本),但对于其他版本,操作过程基本相同。
准备工作
让我们安装必要的依赖项。
- 更新系统。 虽然不是强制的,但我通常会先更新,以确保所有软件包都是最新版本。
yum update -y
- 安装所需的软件包。
yum install wget gcc openssl-devel -y
wget https://curl.haxx.se/download/curl-7.67.0.tar.gz
- 解压下载的 gz 文件。
gunzip -c curl-7.67.0.tar.gz | tar xvf -
解压后,会在当前目录下创建一个新文件夹。
在 CentOS/RHEL 上编译 cURL
下载并解压最新的 cURL 版本后,即可开始编译。
- 进入解压后创建的新文件夹。
cd curl-7.67.0
- 使用 SSL 选项进行配置。
./configure --with-ssl
- 您会看到类似以下的输出。
configure: Configured to build curl/libcurl:
Host setup: x86_64-pc-linux-gnu
Install prefix: /usr/local
Compiler: gcc
CFLAGS: -Werror-implicit-function-declaration -O2 -Wno-system-headers -pthread
CPPFLAGS:
LDFLAGS:
LIBS: -lssl -lcrypto -lssl -lcrypto -lz
curl version: 7.67.0
SSL: enabled (OpenSSL)
SSH: no (--with-libssh2)
zlib: enabled
brotli: no (--with-brotli)
GSS-API: no (--with-gssapi)
TLS-SRP: no (--enable-tls-srp)
resolver: POSIX threaded
IPv6: enabled
Unix sockets: enabled
IDN: no (--with-{libidn2,winidn})
Build libcurl: Shared=yes, Static=yes
Built-in manual: enabled
--libcurl option: enabled (--disable-libcurl-option)
Verbose errors: enabled (--disable-verbose)
Code coverage: disabled
SSPI: no (--enable-sspi)
ca cert bundle: /etc/pki/tls/certs/ca-bundle.crt
ca cert path: no
ca fallback: no
LDAP: no (--enable-ldap / --with-ldap-lib / --with-lber-lib)
LDAPS: no (--enable-ldaps)
RTSP: enabled
RTMP: no (--with-librtmp)
Metalink: no (--with-libmetalink)
PSL: no (libpsl not found)
Alt-svc: no (--enable-alt-svc)
HTTP2: disabled (--with-nghttp2)
HTTP3: disabled (--with-ngtcp2, --with-quiche)
ESNI: no (--enable-esni)
Protocols: DICT FILE FTP FTPS GOPHER HTTP HTTPS IMAP IMAPS POP3 POP3S RTSP SMB SMBS SMTP SMTPS TELNET TFTP
Features: SSL IPv6 UnixSockets libz AsynchDNS NTLM NTLM_WB HTTPS-proxy
make
make install
编译过程需要几秒钟。完成后,您可以验证版本,以确认安装成功。
在 Ubuntu 上编译 cURL
假设您已按照“准备工作”部分的步骤下载了最新版本。
- 进入解压 cURL 的文件夹。
- 安装依赖项。
apt-get install -y binutils-common binutils make
- 如果您没有安装上述依赖项(binutils),则可能会收到以下错误信息。
configure: error: ar not found in PATH. Cannot continue without ar.
- 接下来,可以使用 configure 命令进行配置。
./configure --with-ssl
- 如果上述命令没有错误,则最后使用 make 命令安装。
make
make install
大功告成!
验证
使用 –version 参数查看版本详细信息。
# curl --version
curl 7.67.0 (x86_64-pc-linux-gnu) libcurl/7.67.0 OpenSSL/1.0.2k-fips zlib/1.2.7
Release-Date: 2019-11-06
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS HTTPS-proxy IPv6 Largefile libz NTLM NTLM_WB SSL UnixSockets
#
结论
正如您看到的,有了清晰的步骤,编译过程并不复杂。我希望本文能帮助您从源代码成功安装 cURL。
您喜欢这篇文章吗? 请分享给更多人吧!