curl之编译

一、编译前工作

        进入下载页面:https://curl.se/download.html,下载.tar.gz包到指定目录。例如,下载curl-8.4.0.tar.gz并解压到/home/jaron/workspace/curl-8.4.0
        在父目录创建构建目录,例如:/home/jaron/workspace/curl-8.4.0-build,通过终端进入构建目录,输入命令:
选项说明:

  • --enable-static:启用静态库(默认禁用)
  • --enable-shared:启用动态库(默认启用)
  • --enable-versioned-symbols:启用版本符号选项
  • --enable-tls-srp:启用 TLS-SRP 功能
  • --with-openssl=/opt/openssl-1.1.1k:显式指 OpenSSL安装根目录

1、常规编译

./../curl-8.4.0/configure \
--enable-static \
--enable-shared \
--enable-versioned-symbols \
--enable-tls-srp \
--with-openssl=/opt/openssl-1.1.1k-ubuntu-x64 \
--prefix=/opt/curl-8.4.0-ubuntu-x64

2、交叉编译

# 设置交叉编译工具链到环境变量
export PATH=/opt/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:$PATH

./../curl-8.4.0/configure \
--host=arm-linux-gnueabihf \
--enable-static \
--enable-shared \
--enable-versioned-symbols \
--enable-tls-srp \
--with-openssl=/opt/openssl-1.1.1k-raspberrypi-armv7l \
--prefix=/opt/curl-8.4.0-raspberrypi-armv7l \
# 手动指定 OpenSSL 头文件和库路径(兜底)
CPPFLAGS="-I/opt/openssl-1.1.1k-raspberrypi-armv7l/include" \
LDFLAGS="-L/opt/openssl-1.1.1k-raspberrypi-armv7l/lib -ldl" \  # -ldl 是 OpenSSL 依赖的动态库加载器
# 强制链接 OpenSSL 库
LIBS="-lcrypto -lssl"

3、注意项

  • 如果是进行交叉编译,则需要先把交叉编译工具链添加到环境变量,然后设置--host选项,指定交叉编译工具链命令的前缀,生成的Makefile文件中会将使用到的编译工具补全成arm-linux-gnueabihf-gcc或者arm-linux-gnueabihf-ar等。
  • 如果启动了--with-openssl选项,则必须先安装openssl库,安装步骤参考链接

二、编译安装

        配置成功后,输入命令:make,成功后,输入命令:make install,即可把curl库安装到目录:/opt/curl-8.4.0-ubuntu-x64

三、环境配置

        设置环境变量,编辑/etc/profile文件,末尾添加:

export CURL_ROOT=/opt/curl-8.4.0-ubuntu-x64
# 运行依赖
export LD_LIBRARY_PATH=$CURL_ROOT/lib:$LD_LIBRARY_PATH
# 开发依赖
export PATH=$CURL_ROOT/bin:$PATH
export CPATH=$CURL_ROOT/include:$CPATH
export LIBRARY_PATH=$CURL_ROOT/lib:$LIBRARY_PATH
export PKG_CONFIG_PATH=$CURL_ROOT/lib/pkgconfig:$PKG_CONFIG_PATH # 需要同步修改pkgconfig目录下libcurl.pc文件中的prefix路径,指定为当前的库路径

四、番外(Windows下编译和环境配置)

1、编译

(1)方法1

        通过CMake(cmake-gui)构建Visual Studio工程,然后再打开工程编译出库。此处省略一万字…

(2)方法2

        请先在系统中安装Visual Studio 6以上版本,本机使用的是Visual Studio 2019,在开始菜单打开所要编译的架构,如这里选择x86
在这里插入图片描述
        进入控制台后,cdcurl-8.4.0\winbuild目录下,执行命令(具体option选项可参考curl-8.4.0\winbuild\README.md说明文档):

nmake /f Makefile.vc mode=<static or dll> <options>

执行结束后,会在curl-8.4.0\builds目录下生成编译结果:
在这里插入图片描述
在这里插入图片描述

2、环境配置

        设如果在Windows下编译安装好了curl,使用CMake构建其他工程时,若需要依赖curl,则需要配置环境变量:
在这里插入图片描述

3、常见错误

(1)链接错误:error LNK2001: 无法解析的外部符号 __imp_ldap_init
1>libcurl.lib(ldap.obj) : error LNK2001: 无法解析的外部符号 __imp_ldap_init
1>libcurl.lib(ldap.obj) : error LNK2001: 无法解析的外部符号 __imp_ldap_unbind_s
1>libcurl.lib(ldap.obj) : error LNK2001: 无法解析的外部符号 __imp_ldap_set_option
1>libcurl.lib(ldap.obj) : error LNK2001: 无法解析的外部符号 __imp_ldap_simple_bind_s
1>libcurl.lib(ldap.obj) : error LNK2001: 无法解析的外部符号 __imp_ldap_search_s
1>libcurl.lib(ldap.obj) : error LNK2001: 无法解析的外部符号 __imp_ldap_msgfree
1>libcurl.lib(ldap.obj) : error LNK2001: 无法解析的外部符号 __imp_ldap_err2string
1>libcurl.lib(ldap.obj) : error LNK2001: 无法解析的外部符号 __imp_ldap_first_entry
1>libcurl.lib(ldap.obj) : error LNK2001: 无法解析的外部符号 __imp_ldap_next_entry
1>libcurl.lib(ldap.obj) : error LNK2001: 无法解析的外部符号 __imp_ldap_first_attribute
1>libcurl.lib(ldap.obj) : error LNK2001: 无法解析的外部符号 __imp_ldap_next_attribute
1>libcurl.lib(ldap.obj) : error LNK2001: 无法解析的外部符号 __imp_ldap_get_values_len
1>libcurl.lib(ldap.obj) : error LNK2001: 无法解析的外部符号 __imp_ldap_value_free_len
1>libcurl.lib(ldap.obj) : error LNK2001: 无法解析的外部符号 __imp_ldap_get_dn
1>libcurl.lib(ldap.obj) : error LNK2001: 无法解析的外部符号 __imp_ldap_memfree
1>libcurl.lib(ldap.obj) : error LNK2001: 无法解析的外部符号 __imp_ber_free

方案: 给工程添加依赖的库:项目右键–>属性–>配置属性–>链接器–>输入–>附加依赖项,把 ws2_32.libwinmm.libwldap32.lib添加进去。

<think> 我们参考了用户的问题和提供的引用内容。用户想了解curl编译的方法,特别是Windows环境下的编译方法。 根据引用[1],提到了curl编译会依赖openssl,需要先交叉编译openssl。但用户的问题没有明确是交叉编译还是普通编译,引用中同时提到了Windows下的编译。 引用[2]和[3]都提到了Windows下编译curl并支持HTTPS,引用[4]则给出了具体的编译步骤(使用Visual Studio和nmake)。 用户当前的问题是“curl编译的方法”,并且引用的内容中包含了交叉编译(针对不同平台)和Windows本地编译。 因此,我们考虑分两种情况介绍: 1. 在Windows下编译curl(支持HTTPS) 2. 交叉编译curl(针对其他平台,如嵌入式环境) 由于引用[4]提供了Windows下使用Visual Studio编译的具体步骤,我们将以此为重点。同时,引用[1]提到了交叉编译需要先编译openssl,这里简要说明交叉编译步骤。 注意:引用[3]提到了使用vcpkg编译,这也是一种方法,但用户没有明确要求,我们以引用[4]的方法为主。 回答结构: 1. Windows下编译curl(使用Visual Studio和nmake) 2. 交叉编译curl(简要步骤,主要参考引用[1]) 同时,根据用户要求,我们需要生成相关问题。 </think> ### curl编译方法详解 curl编译分为本地编译(如Windows环境)和交叉编译(为其他平台编译)。以下是具体方法: #### 一、Windows本地编译(支持HTTPS) 1. **安装依赖** - 安装 [Visual Studio](https://visualstudio.microsoft.com/)(2019或更高版本) - 下载curl源码:[官方下载页面](https://curl.se/download.html) 2. **编译步骤** - 打开 **x86/x64 Native Tools Command Prompt**(对应目标架构) - 进入curl源码的 `winbuild` 目录: ```bash cd curl-8.4.0\winbuild ``` - 执行编译命令(示例为静态库+SSL支持): ```bash nmake /f Makefile.vc mode=static SSL=1 ``` > **关键参数说明**: > - `mode=static`:生成静态库(`mode=dll` 生成动态库) > - `SSL=1`:启用OpenSSL支持(需提前编译OpenSSL并设置环境变量`OPENSSL_PATH`)[^4] 3. **生成结果** 编译完成后,在 `builds` 目录生成: - 包含文件:`include\curl\` - 库文件:`lib\`(静态库为`.lib`,动态库为`.dll`) --- #### 二、交叉编译(如嵌入式Linux) 1. **先编译依赖库** - **交叉编译OpenSSL**: ```bash ./Configure linux-armv4 --prefix=/opt/openssl-arm make && make install ``` - **设置环境变量**: ```bash export OPENSSL_ROOT=/opt/openssl-arm ``` 2. **交叉编译curl** ```bash ./configure --host=arm-linux-gnueabihf \ --with-openssl=$OPENSSL_ROOT \ --prefix=/opt/curl-arm make && make install ``` > **参数说明**: > - `--host`:指定目标平台(如 `arm-linux-gnueabihf`) > - `--with-openssl`:指向交叉编译的OpenSSL路径[^1] --- ### 编译选项扩展 | 选项 | 作用 | 示例 | |---------------|-------------------------------|-----------------------| | `DEBUG=1` | 启用调试模式 | `nmake ... DEBUG=1` | | `SSH=1` | 启用LibSSH2(SFTP支持) | `nmake ... SSH=1` | | `ZLIB=1` | 启用压缩支持 | `nmake ... ZLIB=1` | > 更多选项参考 `winbuild\README.md`[^4]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值