文章目录
前言
博主系统:ubuntu18.04
博主编程所用IDE: VSCode
情况介绍:博主电脑中有两个版本的opencv , 一个是安装ros的时候安装下来的opencv3 。 一个是自己编译安装的最新版opencv4 。
提示:以下是本篇文章正文内容,下面案例可供参考
一、vscode在环境中找头文件
一般来说,这两个版本的opencv都放在了系统环境变量中。
- 博主安装的opencv4 放在了
usr/local/include/opencv4
- ros安装的opencv3 放在了
usr/include/opencv2
可以看到在vscode中如果你查看某个cv函数的定义, 会自动跳转到这个路径的usr/include/opencv2
opencv3 版本。
二、解决办法
方法一:详细写 include 头文件【不推荐】
这个时候查看cv函数的定义 ,他会跳转到opencv4 版本, 因为在系统中这样一个文件结构的头文件路径,是opencv4 独有的。
但是不推荐这样做,这样你在opencv4中编写的代码 ,那些用opencv3 的人就看不了了。 不利于移植。 而且写的冗长 。
那么怎么样才能让# include<opencv2/opencv.hpp>
这个头文件指向opencv4版本呢?看方法二
方法二:修改c_cpp_properties.json
在vscode中 ctrl+p 召唤命令行 , 输入C++ 会看到 一个配置c++选项。 选中即可
接着该文件夹下会创建c_cpp_properties.json文件。 修改内部配置
vscode检索头文件的时候 优先在
- 当前程序目录下找头文件 一般是
include"func.hpp"
- 接着按照c_cpp_properties.json 中include的配置,在相应的目录下寻找
- 最后去系统的环境中寻找 如 usr/local/include usr/include 等等
这样设置以后 opencv2/opencv.hpp>
就指向了opencv4版本, vscode 会先到usr/local/include/opencv4
这个路径找,这样就先找到了opencv4
现在vscode 中cv的代码定义 头文件等等 就指向了对应的版本 。
如果你想头文件指向其他版本 就是异曲同工了 ,配置搜索路径的优先性 即可。
可见 此时编写的头文件 opencv2 有多个路径了。当然此时编写的opencv2/opencv.hpp
优先指向我们指定的路径的。
三、 问题出现的原因:博主的解释
为什么一开始: <opencv2/opencv.hpp>
没有指向opencv4所在的路径呢?
前文提到:
- 博主安装的opencv4 放在了
usr/local/include/opencv4
- ros安装的opencv3 放在了
usr/include/opencv2
明显opencv4存放的路径在local/incldue
即使是在系统环境中 找头文件usr/local/incldue
也是优先于usr/incldue
检索的。
博主觉得问题在于:检索系统环境寻找头文件的时候 不会 递归检索
即:在 usr/local/incldue
这一个目录中检索 <opencv2/opencv.hpp>
明显是找不到的,因为usr/local/incldue
没有opencv2/
这个文件夹 , 只有 opencv4
这个文件夹。显然系统并不会往下继续找一层。 不会找到 opencv4/opencv2/opencv.hpp
结果就是local/incldue
下找不到 , 最后只能在 usr/include
找到了对应的文件。 所以vscode 的头文件就指向了 opencv3 那个版本了。
如果我对于这个问题的理解有差错 ,请一定帮忙指正。 博主只是提供一种理解的思路,并不保证正确。 【虽然我这种理解 能 解释蛮多问题的 O(∩_∩)O哈哈~ 】
总结
这是vscode 和linux 环境变量的相关知识 ,对于理解linux下C++的开发和编译也有帮助。
最后
彦祖,我看你就是一个学习的料 。内心向善的人才能学的好, 你若问我怎样再能内心向善呢?那当然是给的博主一个赞了(≧▽≦)/,O(∩_∩)O哈哈 ~
下次见!
看我干嘛, 快点赞!
如果有帮助到你的话,点个赞吧。遇到什么问题 留言即可。