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
没有

失败
相关推荐
LMT流氓兔13 小时前
第五单元——第十六课:给书店助手加上网页界面
java·开发语言·jvm·人工智能·oracle·langchain·1024程序员节
专注仿真13 小时前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
外收内放14 小时前
Python基础语法练习题(75)
开发语言·python·学习
starzy199014 小时前
Scala循环与判断:一切皆表达式的控制流
开发语言·人工智能·scala
starzy199015 小时前
Scala类和对象:从构造器到样例类的完整指南
开发语言·后端·scala
niucloud-admin15 小时前
NIUCLOUD PHP SAAS上门家政使用文档--服务订单:订单列表
开发语言·php
D e re k ZH15 小时前
P5025 [SNOI2017] 炸弹
c++·算法
怪我冷i15 小时前
Rust 的impl语法详解
开发语言·后端·rust
wuminyu15 小时前
Java字节码学习总结:字节码如何加载、解析和执行
java·linux·c语言·jvm·c++
qq_4069810316 小时前
c++的decltype是什么
开发语言·c++