前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用vcpkg编译curl

使用vcpkg编译curl

作者头像
大菊观
发布2024-06-13 10:44:52
980
发布2024-06-13 10:44:52
举报

前言:curl目前写这边文章的时候,已经是8.8.0版本了。在win上面编译一份支持各种特性的不是特别容易。因此偷懒使用下vcpkg来编译,方便又快捷。

  • 准备
  1. 安装git,最好有个能快速访问网络源码的工具。
  2. 安装visual studio,我直接装的2022,有最新的你可以直接装最新的。
  3. 拉取vcpkg代码,https://github.com/Microsoft/vcpkg.git 微软官方的库。如果已经有vcpkg了,那么也建议在vcpkg目录下执行下git pull。vcpkg目录里面执行bootstrap-vcpkg.bat生成vcpkg.exe。就算vcpkg安装好了。
  • 编译openssl。(如果你打算使用openssl来让curl库支持https、ssl,那么要先安装下openssl,如果用win系统自带的或者mbedtls之类的,就不用编译openssl)
  1. 在vcpkg目录下,找到ports>openssl>windows,里面有个portfile.cmake文件,记事本打开即可,在文件前面位置(可以写在set(ENV{COMSPEC} "${cmd}") 行下面)写入新的行:set(VCPKG_CRT_LINKAGE static),当然写在最前边第一行应该也可以吧。然后保存并关闭文件。这一行主要是设置MT编译,不用带vc的运行时库那些dll了。如果你需要MD编译,那么不用加这一行。
  2. 命令行执行命令:vcpkg.exe install openssl:x86-windows,生成的就是32位的MT编译的openssl,一般都是最新版本的openssl3。
  • 编译libpsl。这一步通常不需要做,因为新的libpsl会依赖一个巨大的icu库,没有特别需求的就不需要支持这个特性了。(主要是用来解析非英文字母数字的域名用的)。
  1. 在vcpkg目录下找到:ports>libpsl>portfile.cmake文件打开。在portfile.cmake文件里面写入set(VCPKG_CRT_LINKAGE static)这一行。目的同样是为了MT编译,icu那块儿如果需要也自行修改。
  2. 保存后,命令行执行命令:vcpkg.exe install libpsl:x86-windows
  • 修改所需特性对应的依赖库的编译方式,都改为MT编译。
  1. 在ports目录里面,找到对应库的文件夹打开,打开后找到portfile.cmake文件,在里面前面位置加上一行set(VCPKG_CRT_LINKAGE static),保存并关闭。
  • 查看curl支持的特性以及说明
  1. 命令行执行vcpkg.exe search curl,可以看到类似curl[brotli]这样的列表,中括号里面就是特性,后面对应的则是说明。
  • 指定特性,编译curl
  1. 执行命令:vcpkg.exe install curl[brotli,c-ares,http2,ldap,non-http,openssl,tool,websockets,zstd]:x86-windows,中括号里面就是特性,可以用逗号分隔以同时支持多个特性。最后:x86-windows就是指要编译32位的版本,如果需要64位的,就填:x64-windows,前面提到的相应的库也要改为64位的。
  2. 等待编译完成,下载和编译都需要时间。
  • 检查编译出来的curl是否全部都是MT编译的
  1. 要使用MT编译curl,那么他所依赖的库必须全部都是MT编译的,否则就失去MT编译的意义了。进入vcpkg>installed>x86-windows>bin目录,看到编译好的各种dll。
  2. 安装个exescope或者其他pe查看工具,用工具查看编译出来的每个dll,确保他们的导入库里面没有vcruntime,api-ms-api-ms-win-crt之类的,如果有就说明这个dll是MD编译的。
  3. 命令行执行vcpkg.exe list查看所有编译好的库,并使用vcpkg.exe remove来删除MD编译的库。
  4. 去vcpkg>ports目录里面找到那些MD编译的对应的库,找到portfile.cmake文件,打开并在前面加上set(VCPKG_CRT_LINKAGE static)这一行内容。保存并重新编译curl库。可以用vcpkg.exe install curl[brotli,c-ares,http2,ldap,non-http,openssl,tool,websockets,zstd]:x86-windows --recurse来使他重新编译需要的依赖库。
  • 测试编译好的curl库
  1. 进入vcpkg>installed>x86-windows>tools>curl目录,可以看到有curl.exe和所需的dll。
  2. 命令行打开并切换到这个目录,然后输入curl.exe https://www.csdn.net,可以看到返回的网页内容,或者是看到一个openssl的报错,是证书报错,可以加上-k忽略证书错误,用curl.exe https://www.csdn.net -k,就看到正确内容了。或者curl官方源码里有个cacert.pem文件,你可以curl.exe https://www.csdn.net --cacert ./cacert.pem,来使用证书访问。
  3. 查看编译出来的curl支持的所有特性,可以用curl.exe --help all来查看。

最后,其实vcpkg在windows上非常好用,许多原本需要交叉编译或者跨平台编译的库,如果vcpkg支持,都可以考虑直接用vcpkg来编译。定制编译特性大致和上面的curl差不多。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档