欢迎光临散文网 会员登陆 & 注册

VS_C++编程学习(二)超详细的OpenCV库配置

2023-02-15 17:58 作者:饼干快快快跑  | 我要投稿

自用,前面是一些补充,要快速配置直接跳到第四节;

一、打开项目

【点击需要运行/查看的项目的*.sln文件】==>相当于【打开该项目】,右键打开文件夹不行

二、注释快捷键

1. 工具->选项 打开选项窗口,在左侧导航栏中定位到 环境->键盘 即可在右侧查看到注释相关内容,在“显示命令包含”下面输入关键字进行过滤,例如输入“注释”即可过滤出注释相关的内容:

2.修改快捷键则将光标定位到“按快捷键”下面的输入框中,然后在键盘上键入自定义的快捷键组合,再依次点击 分配->确定 即可。

3.自定义快捷键需要注意并不能定义一个已有的快捷键组合,否则会导致快捷键冲突无法使用,因此需要把其他用到Ctrl + /的功能移除掉

三、配置项解析

参考:

https://blog.csdn.net/zeye5731/article/details/125898439?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-125898439-blog-105249804.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-125898439-blog-105249804.pc_relevant_3mothn_strategy_recovery&utm_relevant_index=11

“利用Visual Studio编写C++工程文件时,时常需要自行配置自己编写的头文件、外部引用的静态链接库和动态链接库的路径,这时候需要在项目属性中进行配置。本文主要介绍包含目录、库目录、附加依赖项、附加包含目录、附加库目录配置与静态库、动态库的调用。”

右键属性:

3.1  包含目录、附加包含目录

1.包含目录是.h的头文件所在的目录,如果没有正确包含目录,代码中会出现红色的警告,各种未定义的标识符。

2.外部包含目录的属性,可以用来定义外部头文件所在的目录位置,外部头文件设置不同的警告级别和其他代码分析级别。这个功能属于附加的功能一般不管。


3.附加包含目录:一般指头文件目录,建议项目引用的其他库的头文件目录在这里配置,而不是在vc++目录–>包含目录。


编译器搜索头文件顺序:

  1. 如果#include使用双引号(“”)形式,它将首先搜索本地目录。现从包含#include语句的当前文件的所在目录开始搜索。若果失败,则从当前目录的父目并逐级往上搜索,直到最上层include文件所在的目录。

  2. 如果#include使用尖括号(<>)形式,或者使用双引号形式本地目录检索失败,它会按照/I选项(附加包含目录)指定的目录搜索。顺序是按照CL在命令行中遇到它们的顺序。

  3. INCLUDE环境变量指定的目录,即包含目录。

所以,对本项目自身的#include一定要用双引号(“”),否则如果用尖括号<>,不会搜索本地目录,而是直接从 附加包含目录 开始搜索,自然就找不到本地的文件,然后报错。

3.2 库目录、附加库目录

作用:指明库文件所在的目录or路径,即寻找.lib文件的搜索目录

区别:优先级不同,先检索附加库目录,再检索库目录

库目录:一般指静态包lib,类似于linux下的/usr/lib。

附加库目录:引用的静态库的目录,一般引用其他库文件时推荐在这里配置,而非vc++目录–>库目录。

3.3 附加依赖项

附加依赖项:即要引用的库的名称,引用的库必须在附加库目录下。附加依赖项等同于在源码中写#pragma(lib,"xxx.lib"),所以,不要重复配置。

作用:指明依赖库文件的名称

3.4 静态链接库调用方法

1.使用一个静态库,除了要include其头文件以外(附加包含目录),还要在链接过程中把lib加进去(附加库目录、附加依赖项)。

2.附加包含目录、附加库目录、附加依赖项的添加方法及说明:

① 附加包含目录—添加工程的头文件目录:

项目->属性->配置属性->C/C+±>常规->附加包含目录:加上头文件的存放目录;

② 附加库目录—添加文件引用的lib静态库路径:

项目->属性->配置属性->链接器->常规->附加库目录:加上lib文件的存放目录;

③ 附加依赖项—添加工程引用的lib文件名:

项目->属性->配置属性->链接器->输入->附加依赖项:加上lib文件名。

3.5 动态链接库的调用方法

1.包含静态链接库的操作

① 附加包含目录—添加工程的头文件目录:

项目->属性->配置属性->C/C+±>常规->附加包含目录:加上头文件的存放目录;

② 附加库目录—添加文件引用的lib静态库路径:

项目->属性->配置属性->链接器->常规->附加库目录:加上lib文件的存放目录;

③ 附加依赖项—添加工程引用的lib文件名:

项目->属性->配置属性->链接器->输入->附加依赖项:加上lib文件名。

2.当需要向项目中添加.dll动态链接库时,直接将需要添加的.dll文件拖拽到项目生成的.exe所在的文件夹下即可(项目->属性->配置属性->常规->输出目录,可以看到.exe生成在哪个目录下)。

3.6 动态链接和静态链接、lib和dll文件

3.6.1 动态链接库和静态链接库

静态链接库:当要使用时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。

动态库而言:某个程序在运行中要调用某个动态链接库函数的时候,操作系统首先会查看所有正在运行的程序,看在内存里是否已有此库函数的拷贝了。如果有,则让其共享那一个拷贝;只有没有才链接载入。在程序运行的时候,被调用的动态链接库函数被安置在内存的某个地方,所有调用它的程序将指向这个代码段。因此,这些代码必须使用相对地址,而不是绝对地址。在编译的时候,我们需要告诉编译器,这些对象文件是用来做动态链接库的,所以要用地址无关代码(Position Independent Code (PIC))。

3.6.2 lib和dll文件

(1)lib是编译时需要的,dll是运行时需要的。

如果要完成源代码的编译,有lib就够了。

如果也使动态连接的程序运行起来,有dll就够了。

在开发和调试阶段,当然最好都有。

(2)一般的动态库程序有lib文件和dll文件。

lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。

(3)在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件。

引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。从上面的说明可以看出,DLL和.LIB文件必须随应用程序一起发行,否则应用程序将会产生错误。

四、OpenCV库的调用

https://www.bilibili.com/read/cv18295846,之前配置过opencv的环境,下载链接在里面

4.1 opencv目录结构

4.1.1 opencv的头文件(包含)目录

C:\opencv\build\include

4.1.2 opencv的库目录和库文件(依赖项)

opencv的库文件在build的x64文件夹里

vs2019用v15的库文件可以

lib库的具体依赖项

常用d后缀的lib库,配合调试的debug的x64模式

编译器注意修改

4.2 opencv库导入

1.附加包含目录在C/C++ 的常规项中配置

C:\opencv\build\include

2.附加库目录在链接器的常规

C:\opencv\build\x64\vc15\lib

3.附加依赖项在链接器的输入项

opencv_world341d.lib

测试:

#include<iostream>

#include<openCV2/opencv.hpp>

using namespace cv;

int main()

{

Mat img = imread("mm.jpg");

namedWindow("mm.jpg");

imshow("mm.jpg", img);

waitKey(6000);

return 0;

}

五、OpenCV库配置导出为项目模板

1.项目-导出为模板

2.项目模板改名

3.导出的模板文件

4.下一次不用在配置opencv了


VS_C++编程学习(二)超详细的OpenCV库配置的评论 (共 条)

分享到微博请遵守国家法律