如何通过vcpkg在Windows系统中安装指定旧版本的curl及其依赖库(libssh、OpenSSL、zlib)
如何通过vcpkg在Windows系统中安装指定旧版本的curl及其依赖库(libssh、OpenSSL、zlib)
嗨,我来帮你搞定这个问题!你直接改json里的版本号导致sha校验失败太正常了——vcpkg每个包的版本都和校验值绑定死了,随便改肯定通不过。要安装指定旧版本的curl和它的依赖,有几个靠谱的方法,我给你详细说下:
方案一:用vcpkg.json锁定版本(推荐)
这是vcpkg官方推荐的版本锁定方式,能精准控制每个依赖的版本,还不会破坏vcpkg的原有配置:
- 在你的项目根目录创建一个
vcpkg.json文件,把你需要的curl及依赖的具体版本填进去,示例如下(把版本号换成你需要的旧版本):
{ "name": "your-project-name", "version-string": "1.0.0", "dependencies": [ { "name": "curl", "version": "7.85.0", "features": ["libssh", "openssl"] }, { "name": "libssh", "version": "0.9.6" }, { "name": "openssl", "version": "1.1.1t" }, { "name": "zlib", "version": "1.2.13" } ] }
- 然后在终端运行命令:
vcpkg install --triplet x64-windows-static-release,vcpkg会自动根据这个配置拉取对应版本的包,自动处理依赖关系和sha校验,完全不用你手动改文件。
方案二:修改vcpkg端口文件(临时需求用)
如果方案一的版本锁定不满足你的需求,你可以直接修改vcpkg本地的端口文件,但要注意这个修改会被vcpkg更新覆盖:
- 找到你的vcpkg安装目录下的
ports文件夹,比如要改libssh的版本,就进入vcpkg/ports/libssh;改OpenSSL就进vcpkg/ports/openssl。 - 每个端口文件夹里有
vcpkg.json和portfile.cmake:你需要先找到目标旧版本对应的这两个文件内容(可以从vcpkg的git历史里找对应版本的提交),把本地的文件内容替换成旧版本的,确保vcpkg.json里的version和sha256值完全匹配旧版本的包。 - 替换完成后,再运行你的安装命令:
vcpkg install curl[libssh,openssl]:x64-windows-static-release,就能安装指定的旧版本了。
方案三:切换vcpkg到旧版本(适合独立项目)
vcpkg的不同版本对应着一套固定版本的软件包,如果你需要的旧版本刚好是某个vcpkg版本默认的包版本,可以直接切换vcpkg的git版本:
- 进入你的vcpkg安装目录,运行
git log --oneline或者git tag,找到包含你需要的库版本的vcpkg标签或提交记录。 - 运行
git checkout <标签名/提交哈希>切换到该版本的vcpkg,然后再运行安装命令即可。 - 注意:这个方法会让整个vcpkg回到旧状态,不适合和其他需要新版本库的项目共用,建议为这个项目单独克隆一份vcpkg来操作。
额外注意事项
- 如果你之前安装过这些库的新版本,记得先运行
vcpkg remove --outdated --triplet x64-windows-static-release清理旧的包缓存,避免版本冲突。 - 填写版本号时一定要准确,必须是vcpkg端口仓库中存在的版本,不然会提示找不到包。
备注:内容来源于stack exchange,提问作者Nzerim
相关产品推荐
相关产品推荐

