Windows C++ 第三方库使用流程备忘录--OpenCV

目录

[三个东西:头文件、lib、dll 分别是什么?](#三个东西:头文件、lib、dll 分别是什么?)

[1. 头文件(.h / .hpp)](#1. 头文件(.h / .hpp))

[2. lib 文件(静态链接信息)](#2. lib 文件(静态链接信息))

[3. dll 文件(运行时真正代码)](#3. dll 文件(运行时真正代码))

[Windows 找 DLL 有规则。](#Windows 找 DLL 有规则。)


写一个 C++ 程序,用 OpenCV 打开摄像头。

实际上做了三件事:

复制代码
你的代码
   ↓
C++编译器
   ↓
生成exe
   ↓
Windows运行

中间涉及三个阶段:

复制代码
1. 编译阶段
2. 链接阶段
3. 运行阶段

三个东西:头文件、lib、dll 分别是什么?

cpp 复制代码
#include <opencv2/opencv.hpp>

cv::Mat img;

程序需要 OpenCV,但是编译器不知道:

cv::Mat 到底是什么?

所以需要:

1. 头文件(.h / .hpp)

作用:

告诉编译器"这个东西存在"

比如:

复制代码
opencv.hpp

里面告诉编译器:

cpp 复制代码
class Mat
{
    ...
};

class VideoCapture
{
    ...
};

相当于:说明书

cpp 复制代码
#include <opencv2/opencv.hpp>

就是读说明书。


2. lib 文件(静态链接信息)

例如:

cpp 复制代码
opencv_world4110.lib

作用:

告诉链接器,函数在哪里

比如你写:

复制代码
cv::imshow();

编译器知道:"哦,有这个函数",链接器问:"这个函数代码在哪?"

lib告诉它:

cpp 复制代码
imshow()
在opencv_world4110里面

然后生成:

复制代码
pROJCT.exe

3. dll 文件(运行时真正代码)

例如:这个才是程序运行时需要的。

复制代码
pROJCT.exe

opencv_world4110.dll 里面没有 OpenCV 的全部代码,它只是记录:

cpp 复制代码
我要调用opencv_world4110.dll里的函数

运行时:

Windows:

复制代码
启动 pROJCT.exe

↓

寻找 opencv_world4110.dll

↓

找到

↓

加载

↓

运行

如果找不到:

复制代码
0xC0000135

就是:DLL不存在,程序无法启动。

Windows 找 DLL 有规则。

它会在:

复制代码
1. exe所在目录
2. 系统目录
3. PATH环境变量目录

寻找。以前:

复制代码
D:\pROJCT\cmake-build-debug

    pROJCT.exe

但是:opencv_world4110.dll

在:

复制代码
D:\OpenCV\opencv\build\x64\vc17\bin

Windows:

cpp 复制代码
启动exe

寻找DLL

D:\pROJCT\cmake-build-debug
没有

系统目录
没有

PATH
没有

失败
相关推荐
余额瞒着我当琳1 小时前
C++STL容器string--迭代器,string的接口,string的遍历,访问方式
c++
郭涤生1 小时前
rootfs 详解与裁剪优化记录
linux·c++·bsp
菜冻鱼1 小时前
Python-sklearn-评估指标
开发语言·人工智能·python·机器学习·numpy·pandas·sklearn
你挚爱的强哥1 小时前
【exportExcel】单纯靠js不用任何其他第三方插件导出xls格式文件
开发语言·javascript·ecmascript
Hello_Damon_Nikola1 小时前
AC7911从入门到精通
开发语言·嵌入式硬件·物联网·php
worxfr2 小时前
Go 并发控制:从 Channel 方向约束到实战模式
开发语言·后端·golang
带鱼吃猫2 小时前
预处理器:宏、运算符与条件编译
c语言·开发语言
小小龙学IT2 小时前
C++ std::vector 底层实现深度解析:内存布局、扩容策略、移动语义与迭代器失效
开发语言·c++·算法
码匠许师傅2 小时前
【C++ 面试真题】聊聊 volatile 和 mutable
开发语言·c++·面试