vcpkg安装指定版本第三方库 示例windows下编译opencv4与对应版本ffmpeg库x86静态库

目录

一、官网下载vcpkg

二、编译步骤

1.正常指令编译

2.自定义vcpkg.json文件指定opencv依赖库中ffmpeg编译版本

3.通过自定义vcpkg.json进行编译

4.vcpkg.json添加编译依赖库以及给依赖库添加编译依赖库

5.集成到Visual Studio

总结


一、官网下载vcpkg

GitHub - microsoft/vcpkg: C++ Library Manager for Windows, Linux, and MacOS

        windows下PowerShell(或双击)执行./bootstrap-vcpkg.bat

        linux下运行./bootstrap-vcpkg.sh

二、编译步骤

1.正常指令编译

        vcpkg目录下直接执行以下命令 安装的是windows下x86依赖ffmpeg的opencv动态库

./vcpkg install opencv[ffmpeg]:x86-windows-static

        此处执行后会观察到编译库中使用的是最新的opencv源码以及ffmpeg源码

        可以看到我的opencv版本为4.8.0,ffmpeg版本为6.1.1,而根据官方opencv源码可以看到其依赖三方库ffmpeg版本为4.x。

opencv/3rdparty/ffmpeg/ffmpeg.cmake at 4.8.0 · opencv/opencv · GitHub

2.自定义vcpkg.json文件指定opencv依赖库中ffmpeg编译版本

        查找了很多方法,最终决定用最简单的方法,直接拷贝vcpkg\ports\opencv\vcpkg.json到vcpkg目录下,这时候我们需要修改一下vcgkg.json

  "name": "opencv",
  "version": "4.8.0",
  "port-version": 1,
  "description": "Computer vision library",
  "homepage": "https://github.com/opencv/opencv",
  "license": "Apache-2.0",
  "dependencies": [
    {
      "name": "opencv4",
      "default-features": false
    }
  ],
  "default-features": [
    "default-features"
  ],

        以上是我直接复制的opencv中vcpkg.json前面一段的内容,接下来在json中添加overrides对象

  "dependencies": [
    {
      "name": "opencv4",
      "default-features": false
    }
  ],
  "overrides": [
    {
      "name": "ffmpeg",
      "version": "4.4.3"
    }
  ],
  "default-features": [
    "default-features"
  ],

        将overrides加在这中间即可,放别的地方应该也可以,不过放在这比较方便修改,如果需要修改其他依赖库或者opencv自己的版本则在overrides对象数组里追加库名字和版本号就可以了。

        其中vcpkg支持的依赖库版本号可以在vcpkg/versions目录下找到。

        要选择修订版本的话在version下添加port-version对象即可,具体也可在versions目录下查看

3.通过自定义vcpkg.json进行编译

vcpkg x-update-baseline --add-initial-baseline

        vcpkg目录下执行以上命令,如果vcpkg.json编写不规范会报错,执行成功则输出

PS D:\Software\vcpkg> vcpkg x-update-baseline --add-initial-baseline
updated registry 'https://github.com/microsoft/vcpkg': baseline '' -> '67a300519ea09dbf02b4d06982e781a01b617b93'

        接着我们只要确定好要编译的环境和依赖库就可以进行编译了,以我的例子接着执行

./vcpkg install --x-feature=ffmpeg --triplet x86-windows-static

        --x-feature=ffmpeg 为vcpkg.json中opencv的可选依赖库 用 vcpkg search 库名称 也可以看到

        --triplert 为编译平台 支持的编译平台可以通过./vcpkg help triplet查看

        其作用与正常指令编译opencv[ffmpeg]:x86-windows-static一致,此时我们可以看到输出

PS D:\Software\vcpkg> ./vcpkg install --x-feature=ffmpeg --triplet x86-windows-static
Detecting compiler hash for triplet x64-windows...
-- Automatically setting %HTTP(S)_PROXY% environment variables to "127.0.0.1:10809".
Compiler found: D:/Software/VS2022/Compilation/VC/Tools/MSVC/14.39.33519/bin/Hostx64/x64/cl.exe
Detecting compiler hash for triplet x86-windows-static...
Compiler found: D:/Software/VS2022/Compilation/VC/Tools/MSVC/14.39.33519/bin/Hostx64/x86/cl.exe
The following packages will be built and installed:
  * ffmpeg[avcodec,avdevice,avfilter,avformat,core,swresample,swscale]:x86-windows-static@4.4.3 -- D:\Software\vcpkg\buildtrees\versioning_\versions\ffmpeg\7e5aad683e1959d2595ae4622e686cf35dbd9ea3
  * flatbuffers:x64-windows@24.3.25 -- D:\Software\vcpkg\buildtrees\versioning_\versions\flatbuffers\f8e85b45608b4005d8e8b4a96cfe11a5c2686e92
  * flatbuffers:x86-windows-static@24.3.25 -- D:\Software\vcpkg\buildtrees\versioning_\versions\flatbuffers\f8e85b45608b4005d8e8b4a96cfe11a5c2686e92
  * libjpeg-turbo:x86-windows-static@3.0.2 -- D:\Software\vcpkg\buildtrees\versioning_\versions\libjpeg-turbo\6d061c71a48ca2abff5cf471f77ef14d7222aa52
  * liblzma:x86-windows-static@5.4.4 -- D:\Software\vcpkg\buildtrees\versioning_\versions\liblzma\f285b7c4ffa2cc065c7c6fec4b61006f7fa2714e
  * libpng:x86-windows-static@1.6.43#2 -- D:\Software\vcpkg\buildtrees\versioning_\versions\libpng\915cc8e8e0adbfb2708a310635217811a849d709
  * libwebp[core,libwebpmux,nearlossless,simd,unicode]:x86-windows-static@1.4.0#1 -- D:\Software\vcpkg\buildtrees\versioning_\versions\libwebp\9d0c00119dd6ec04488b4e0c926aa3ae73b95847
    opencv4[core,dnn,ffmpeg,jpeg,png,quirc,tiff,webp]:x86-windows-static@4.8.0#19 -- D:\Software\vcpkg\buildtrees\versioning_\versions\opencv4\85685a5e45ef916a21769da98c8346462ef179d0

         然后就搞定了!如果想自己写vcpkg.json也可以,但是太麻烦我就懒得再试了。

4.vcpkg.json添加编译依赖库以及给依赖库添加编译依赖库

"default-features": {
      "description": "Platform-dependent default features",
      "dependencies": [
        {
          "name": "opencv4",
          "default-features": false,
          "features": [
            "dnn",
            "jpeg",
            "png",
            "quirc",
            "tiff",
            "webp"
          ]
        },

        vcpkg.json中在默认依赖中增加即可,或者用--x-feature的方式,但是ffmpeg依旧是编译默认的依赖库,具体可见ffmpeg中的vcpkg.json,我们只要在自定义vcpkg.json中加即可。

    "ffmpeg": {
      "description": "ffmpeg support for opencv",
      "dependencies": [
        {
          "name": "opencv4",
          "default-features": false,
          "features": [
            "ffmpeg"
          ]
        },
        {
          "name": "ffmpeg",
          "default-features": false,
          "features": [
            "avcodec",
            "avdevice",
            "avfilter",
            "avformat",
            "swresample",
            "swscale",
            "ffplay",
            "freetype",
            "iconv",
            "lzma",
            "opencl",
            "opengl",
            "openh264",
            "openjpeg",
            "openssl",
            "postproc",
            "sdl2",
            "webp",
            "x264",
            "x265",
            "xml2",
            "zlib"
          ]
        }
      ]
    },

        在opencv的可选依赖库features中ffmpeg部分dependencies添加ffmpeg编译依赖库,上面这段意思就是opencv依赖ffmpeg,ffmpeg则依赖下面追加的一堆库,默认的话只会有features中的前六个,虽然我现在还没用到这么多功能就是了,有没有编译到库可以在编译输出直接看到。

5.集成到Visual Studio

./vcpkg integrate install

         运行以上指令就能在vs项目属性页的配置属性里面看到vcpkg

        然后我们在安装路径设置成我们vcpkg安装的库就行了,正常使用指令安装是会安装在运行目录下installed文件夹,无需手动设置,使用自定义vcpkg.json则安装在vcpkg_installed目录下。

        如果将vcpkg文件夹添加到了环境变量里面也可以在其余目录执行,生成库则在运行目录下

总结

        记录一下编译过程,以下为参考链接

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

Visual Studio开源库集成器Vcpkg全教程--利用Vcpkg轻松集成开源第三方库

  • 29
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值