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

使用CMake编译 OpenCV 静态库

使用CMake编译OpenCV源码

在需求使用不常用的OpenCV版本时,或者不常用的VS版本时如VS2015等等,在网上难以找到对应版本编译的库

且如果想要静态库也更加难找 现成提供的库不了解其运行时库的编译方式(通常都是/MD动态链接运行时库),如果需要/MT方式也需要自行编译

所以推荐自行编译自己需要的对应版本的库

动态链接运行时库/MD与静态链接运行时库/MT

首先讲一下这两种方式的区别

在VS中,项目属性-> C/C++ -> 代码生成 有一项运行库设置

image

动态链接运行时库

默认/MD动态链接运行时库,这种方式生成的exe或DLL需要目标电脑上安装有对应版本的VC++ Redistributable C++环境

优点是文件体积小,生成的exe或DLL不包含运行时库代码,内存效率高,多个程序共享一份DLL代码

静态链接运行时库

/MT静态链接运行时库将C/C++标准库代码复制到生成的exe或DLL中,部署更加简单,无需目标机器环境依赖,可以在纯净Windows系统上运行,且不受系统运行时库版本影响

缺点则是文件体积较大

OpenCV库编译

下面正式开始介绍OpenCV库编译的内容

源码下载

在GitHub上搜索opencv找到其源码仓库https://github.com/opencv/opencv,点击Release,找到需要的版本
image

找到需要的版本,这里我选择的是4.8.0版本

下载源码压缩包文件
image

解压到本地文件夹中
image

CMake配置

(需提前安装好CMake)

打开CMake-GUI
image

配置完路径后,点击Configure后在弹出框中选择需要的VS版本 以及位数x64还是x86 点击finish 初次可能会下载缺少的DLL会比较慢 耐心等待即可
image

完成后界面如下 下面可以取消掉一些不必要的模块
image

Python、Java相关的都可以取消掉
image
image

BUILD_opencv_world可以勾选上 编译之后只需要链接一个lib,比较方便
image

编译动态库还是静态库 BUILD_SHARED_LIBS 勾选上表示动态库 这里我需要的是静态库 所以取消勾选
image

  • 动态库与静态库的区别
    • 如果编译的是动态库,那么在VS中可以通过动态调用DLL或隐式静态调用,但都需要提供DLL文件到项目生成的exe或DLL同级目录
    • 如果编辑的是静态库,那么只能在VS静态调用,同时会将调用到的库封装到项目生成的exe或DLL中,不需要额外依赖DLL文件

接着是项目需求的运行库链接方式,项目默认都为/MD动态链接运行时库,此时需要将BUILD_WITH_STATIC_CRT取消勾选 如果项目需求是/MT方式则勾选上
image

修改完成后再次点击Configure按钮,可能需要多点几次,直到图中部分没有红色条目
image

点击Generate生成 完成后可以直接点击Open Project打开项目 也可以去对应目录下打开项目
image

VS编译

打开项目 首先切换Debug与Release模式 选择自己需要的模式与位数
image

找到modules模块 下面任意一个工程右击属性
image

C/C++ -> 代码生成 查看运行库链接方式 是否与自己项目所需的一致 如果不一致需要重新去CMake配置BUILD_WITH_STATIC_CRT再重新生成
image

检查无误后 右击INSTALL 生成 开始编译
image

等待其编译完成 即可
image

OpenCv静态库调用示例

首先创建一个示例程序 右击项目属性
image

在C/C++ 常规中附加包含目录 添加生成在选择的opencv目录下install中的include目录
image

顺便查看代码生成中运行库链接方式 是否与编译的OpenCV库一致
image

接着在链接器->常规->附加库目录添加生成的staticlib文件夹 (里面是生成的lib文件,如果是生成的动态库,文件夹名称为lib)
image

然后在链接器->输入->附加依赖项中添加staticlib下的lib文件,在CMake配置中选择了BUILD_opencv_world则需要附加的lib减少了很多
image
image

opencv_world480.lib
ippicvmt.lib
ippiw.lib
ittnotify.lib
libjpeg-turbo.lib
IlmImf.lib
zlib.lib
libpng.lib
libwebp.lib
libtiff.lib
libopenjp2.lib

然后编写一个调用OpenCV的示例,查看能否调用成功

image

调用成功 至此完成了OpenCV静态库的静态调用

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

相关文章:

  • 2026磁导率仪市场格局洞察:主流制造企业与供货商实力大盘点
  • 2026年盐雾试验机优质厂家推荐:上海、江苏及非标定制类
  • 2026年口碑好的柔性振动盘/五金振动盘厂家实力及用户口碑排行榜
  • 杰理之DRC0参数没有更新成功,导致效果和调试的不一致【篇】
  • CTFHub Web进阶-PHP:Bypass_disable_function通关4之PHP-FPM - 实践
  • 每日面试题分享164:HTTP与RPC之间的区别?
  • 杰理之使用新版本的plate reverb音效修改方法【篇】
  • 2026年上海丙烯酸酯无硫加臭剂公司权威推荐:精准加臭全站式/安全精准环保加臭全站/气相色谱加臭浓度检测公司精选
  • 测试驱动开发实战:用 Claude 高效编写单元测试与集成测试用例
  • 2026年比较好的高速震动盘/无损震动盘厂家最新用户好评榜
  • 讲讲南方网通GEO加盟,如何选择靠谱合作模式
  • Claude开发进阶 04,Claude 一键生成技术文档:解放开发者的“文档枷锁”
  • 2026年上海婚介公司价格对比,资质齐全的婚介专业公司多少钱
  • 2026年海南地区一站式服务公司盘点,海南睿臻领航靠不靠谱
  • 分析2026年主流风口行业,专业GEO - AI全链路增长服务公司Top10
  • 盘点青虾仁厂家排名,靠谱品牌为你揭晓
  • 盘点招牌大颗粒虾滑供应商,这些品牌值得关注
  • 总结工业液晶屏性价比高的厂商,旭虹科技靠谱吗?
  • 2026年食品级涂料店靠谱推荐,为健康家装保驾护航
  • 嘉立创EDA:自动升级软件下载下来的安装包存放在什么地方
  • 2025年国内比较好的库房货架制造商排名,层板货架/中型货架/隔板货架/仓储货架/重型货架,库房货架制造企业怎么选
  • 删除金仓数据库KingbaseES中的审计记录
  • 2026年知名的无磁弹簧/高压直流继电器弹簧厂家最新权威实力榜
  • 基于Java+Springboot+Vue开发的民宿酒店客房预订管理系统源码+运行步骤+计算机技术
  • 2026.01.29
  • CG-09H超声波风速风向传感器:准确测风,稳定可靠
  • 车机系统触控界面自动化测试实践
  • ubuntu安装SELinux
  • 上海隧道炉供应商有哪些?五家实力企业及设备特点解析
  • 2026年知名的纤维缠绕自润滑轴承/重载型自润滑轴承优质厂家推荐榜单