当前位置: 首页 > news >正文

完整教程:记录:vcpkg清单模式安装指定版本的curl和OpenSSL

0.前言

Python的pip安装指定版本的包很方便:

pip install numpy==1.21.0

pip install "pandas>=1.3.0,<2.0.0"

但vcpkg是没法在install里直接指定版本的,vcpkg提供了从清单文件安装依赖项的功能

vcpkg安装库经常遇到下载问题,可以先上飞机

1.安装OpenSSL1.1.1g

准备vcpkg.json放到vcpkg.exe同级目录

{"name": "curl-openssl","version-semver": "1.0.0","dependencies": [{"name": "openssl","platform": "windows"}],"overrides": [{"name": "openssl","version-string": "1.1.1g","port-version": 1}],"builtin-baseline": "1914114b6028c6ebf1fa9f17facaf0828a02a3c6"
}

更新builtin-baseline到当前commit版本:

./vcpkg x-update-baseline --add-initial-baseline

执行安装命令:

./vcpkg install --triplet x86-windows

会报错:

在versions目录下找到openssl.json,git查看更新记录,往前找到第一次出现1.1.1g的commit,替换到baseline,再次执行install,新的错误:

vcpkg.json将openssl和openssl-windows都指定版本:

{"name": "curl-openssl","version-semver": "1.0.0","dependencies": [{"name": "openssl","platform": "windows"},{"name": "openssl-windows","platform": "windows"}],"overrides": [{"name": "openssl","version-string": "1.1.1g","port-version": 1},{"name": "openssl-windows","version-string": "1.1.1g","port-version": 0}],"builtin-baseline": "68a74950d0400f5a803026d0860f49853984bf11"
}

提示安装成功:

list命令查看安装结果:

把vcpkg.json中的dependencies库去掉,重新执行install就可以卸载掉没在清单中的库

测试发现后面新的OpenSSL版本,如1.1.1h和1.1.1n又不会提示循环依赖了,用1.1.1n在最新的baseline也可以安装

2.安装curl+OpenSSL1.1.1g

根据上面选择的baseline commit日期找到curl.json的提交记录,选择对应的curl版本,更新vcpkg.json配置:

{"name": "curl-openssl","version-semver": "1.0.0","dependencies": ["zlib",{"name": "openssl","platform": "windows"},{"name": "openssl-windows","platform": "windows"},{"name": "curl","features": ["openssl"],"platform": "windows"}],"overrides": [{"name": "openssl","version-string": "1.1.1g","port-version": 1},{"name": "openssl-windows","version-string": "1.1.1g","port-version": 0},{"name": "curl","version": "7.73.0","port-version": 0}],"builtin-baseline": "68a74950d0400f5a803026d0860f49853984bf11"
}

执行安装命令:

./vcpkg install --triplet x86-windows

查看安装结果:

一般zlib静态链接,避免和其他的库冲突,在triplets目录找到x86-windows.cmake,复制粘贴改个自定义的名字,指定zlib静态链接,同时还能指定工具链版本,如VS2019即v142:

set(VCPKG_TARGET_ARCHITECTURE x86)
set(VCPKG_PLATFORM_TOOLSET v142)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE dynamic)
if(PORT STREQUAL "zlib")set(VCPKG_LIBRARY_LINKAGE static)
endif()

在install时使用我们自己写的的triplet:

./vcpkg install --triplet x86-windows-curl

安装结束在生成目录可以看到zlib.dll没有了:

导出我们的库:

./vcpkg export --output-dir=./exports --raw

写一个Demo测试https访问是否正常:

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp)
{size_t realSize = size * nmemb;std::string* buffer = static_cast(userp);buffer->append(static_cast(contents), realSize);return realSize;
}
void MainWindow::testCurl()
{curl_global_init(CURL_GLOBAL_DEFAULT);do {CURL *curl = curl_easy_init();if (!curl) break;std::string url = "https://httpbin.org/post";std::string body = R"({"username":"gongjianbo","password":"123456789"})";std::string response;curl_easy_setopt(curl, CURLOPT_URL, url.c_str());curl_easy_setopt(curl, CURLOPT_POST, 1L);curl_easy_setopt(curl, CURLOPT_POSTFIELDS, body.c_str());curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, body.size());struct curl_slist* headers = nullptr;headers = curl_slist_append(headers, "Content-Type: application/x-www-form-urlencoded");curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);// 忽略证书验证curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);CURLcode res = curl_easy_perform(curl);if (res != CURLE_OK){qDebug() << "curl error: " << curl_easy_strerror(res);}else{ui->textEdit->append(QString::fromStdString(response));qDebug() << "Response:" << QString::fromStdString(response);}curl_slist_free_all(headers);curl_easy_cleanup(curl);} while(false);curl_global_cleanup();
}

3.本文参考

参考博客:https://blog.csdn.net/weixin_46486440/article/details/144994426

官方文档:https://learn.microsoft.com/zh-cn/vcpkg/consume/lock-package-versions?tabs=inspect-powershell

官方示例:https://learn.microsoft.com/zh-cn/vcpkg/consume/boost-versions

http://www.jsqmd.com/news/361356/

相关文章:

  • HoRain云--Backbone.js轻量级框架解析
  • 2026年OEM蠕动泵选购指南:关键考量因素与品牌优选分析 - 品牌推荐大师
  • 【必收藏】小白/程序员入门大模型避坑指南!拆解AI招聘乱象,少走半年弯路
  • 2026年口碑好的电动反弹器/橱柜反弹器厂家推荐及采购参考 - 行业平台推荐
  • HoRain云--揭秘AQS:ReentrantLock高效锁机制
  • 1999-2024年 上市公司-微观企业劳动力生产率数据(数据+代码+文献)
  • JAVA核心技术实战
  • 井通 CUTLASS 01章:静看 cutlass 之 01 记 目录结构
  • 收藏备用|大模型知识蒸馏入门详解(小白/程序员必看,附经典文献+行业趋势)
  • 深度测评 10个降AIGC平台:专科生必看!降AI率全维度对比与推荐
  • 2026年论文AI工具深度实测:拒绝“假文献”,这3款才是本硕博全流程救星! - 沁言学术
  • 2026年靠谱的超薄三节隐藏轨/液压三节隐藏轨直销厂家推荐选哪家(更新) - 行业平台推荐
  • 从零开始!用MCP架构打造强大Agentic RAG系统,小白也能轻松上手(收藏备用)
  • 53、AI大模型技术之NLP核心(6、Transformer模型核心结构以及编码器)
  • 2026年比较好的液压上翻门/缓冲上翻门精选供应商推荐口碑排行 - 行业平台推荐
  • 硬核工控:手搓企业级边缘网关(从硬件选型到云端对接全通关)
  • 收藏!算法工程师薪资全景解析(含大模型岗),小白/程序员必看
  • 好写作AI:别让灵感死在地铁里!把碎片时间变成你的“创作金矿”
  • 学长亲荐!千笔,专科生论文写作神器
  • 探寻河南靠谱的家用净水设备生产厂家 - 工业推荐榜
  • 好写作AI体验手记:第一天,我竟然干掉了拖延一周的“写作债”
  • 基于python的海鱼类科普网站的 海洋生物知识科普系统
  • 2026年专业微孔曝气器定制厂家综合评估与推荐 - 2026年企业推荐榜
  • 改稿速度拉满 9个降AI率网站深度测评与推荐
  • 2026年风冷冷却器性价比排名前十,曲阜久鼎酿酒设备上榜 - 工业品网
  • 2026年公众号运营新风口:3大收益前景与实操指南 - peipei33
  • 2026年光伏板拆解处理厂家TOP5,聚焦太阳能板高值化与层压材料分离技术突破 - 深度智识库
  • 好写作AI:智能校对,你文章的“最后一道防线”,专治各种公开处刑
  • 2026年质量好的橱柜平板铰链/小角度平板铰链供应商采购指南选哪家 - 行业平台推荐
  • 别让福利沉睡:支付宝红包套装背后的理性消费选择 - 团团收购物卡回收