• vcpkg 安装任意版本的开源库


    为表述方便,本文全以openssl为例。

    常规安装

    前面已经写过vcpkg的简明教程:https://blog.csdn.net/poinsettia/article/details/127885576

    只要执行以下几行命令,就可以安装好openssl

    git clone https://github.com/Microsoft/vcpkg.git # install vcpkg
    ./vcpkg\bootstrap-vcpkg.bat # build vcpkg.exe
    ./vcpkg install openssl:x64-windows # install opensl
    
    • 1
    • 2
    • 3

    但是这样有个问题是,这样只能安装默认版本的openssl,无法指定具体的openssl。

    注:openssl的版本定义在ports文件夹中的vcpkg.json中

    Example

    {
      "name": "openssl",
      "version-string": "1.1.1n",
      "description": "OpenSSL is an open source project that provides a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols. It is also a general-purpose cryptography library.",
      "homepage": "https://www.openssl.org",
      "license": "OpenSSL",
      "dependencies": [
        {
          "name": "vcpkg-cmake",
          "host": true
        },
        {
          "name": "vcpkg-cmake-config",
          "host": true
        }
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    那如何安装自己想要的版本呢? 比如目前vcpkg的默认版本(其实是最新版本)是3.0.7,我想安装1.1.1n 怎么办呢?

    安装任意版本

    Refer:https://stackoverflow.com/questions/53805917/install-older-version-of-protobuf-via-vcpkg

    The selected answer

    To have a specific version of a package in vcpkg, you need to checkout at the appropriate point in time in the vcpk repo.

    1. Go to your git installed vcpk folder.
    2. Identify the commit matching the version of protobuf you’re looking for.

    The following line color-codes the commit history to make it more readable and pipe it with grep to identify protobuf related commits.

    git log --color=always --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad)' --date=short | grep --color=never openssl
    
    • 1

    You’ll find a line like b1fea4588 - [protobuf] update to 3.5.1 (2018-01-31). (The commit hash/message may have changed if the history has been rewritten.)

    1. Checkout the commit of interest : git checkout b1fea4588
    2. Run vcpkg install protobuf

    The issue of package version management is very active on vcpkg repo. Check Issue #3592

    大意就是根据git log 找到openssl1.1.1n 对应的vcpkg的git 节点,把vcpkg git repo reset到对应节点,然后就可以install 1.1.1n版本啦。

    那如果版本在vcpkg找不到呢? 比如 openssl1.1.1q

    利用vcpkg build自己想要的包

    refer:https://vcpkg.io/en/docs/examples/packaging-zipfiles.html

    文中的方法麻烦的点是在于要自己写portfile.cmake, 为了简单起见,我直接利用了openssl1.1.1n的工程进行改造。具体过程如下:

    1. 利用git log找到升级openssl1.1.1n的节点

    2. git show 查看具体提交了什么内容

    3. 仿照git show提交的内容,把1.1.1n版本改为1.1.1q版本。

      我是借助TortoiseSVN 工具,可以更方便看到修改的文件。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CFt4blZy-1668671164163)(windows openssl 出包.assets/image-20221117154016692.png)]

    遇到的最主要问题就是hash值校验,这个问题也可以很方便解决,因为在install 的时候会给出提示,提示中有正确的hash,直接复制过去即可。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cV9iUKyX-1668671164164)(windows openssl 出包.assets/image-20221117154407120.png)]

    1. install ./vcpkg install openssl:x64-windows
  • 相关阅读:
    基于Spark封装的二次开发工程edata-base,介绍
    【源码】16国语言交易所源码/币币交易+期权交易+秒合约交易+永续合约+交割合约+新币申购+投资理财/手机端uniapp纯源码+PC纯源码+后端PHP
    猿创征文|大数据bug笔记之利用Hudi将数据落地到HDFS
    【前端】不同类型数据组装拼接
    【测开方法论】学习后如何举一反三
    6年开发大神用4000字带你把响应式微服务架构一下子给吃透
    QML自定义可长按短按的SpinBox
    QT 搭建opencv 环境
    无线通信技术概览
    基于 Cyclone IV 在 Quartus 中配置 IP 核中的 PLL 与 RAM 的详细步骤
  • 原文地址:https://blog.csdn.net/poinsettia/article/details/127905355