设为首页 收藏本站
查看: 1252|回复: 0

[经验分享] ubuntu opencv2和opencv3共存使用;gcc,g++默认的include目录;include_directories()用法

[复制链接]

尚未签到

发表于 2017-11-20 11:25:08 | 显示全部楼层 |阅读模式
  共存
  Opencv2.4.9安装目录/usr/local
  Opencv3.2.0安装目录/usr/local/opencv320
  由于本电脑上gcc和g++默认包含(include)路径如下文所示,所以在CMakeLists.txt中,
  使用find_package(OpenCV REQUIRED)之后。即使不写include_directories( ${OpenCV_INCLUDE_DIRS} )
  编译器也能在/usr/local/include下搜索到Opencv2.4.9头文件,因为/usr/local/include 是编译器默认搜索路径。
  

  若要使用OpenCV3.2.0,则需要在CMakeLists.txt中添上:
  #本电脑默认OpenCV_DIR为“Opencv2安装路径/share/OpenCV"
  set(OpenCV_DIR "OpenCV3安装路径/share/OpenCV" )
  #版本要求可选:find_package(OpenCV3 REQUIRED)
  find_package(OpenCV REQUIRED )
  

  结果使用的便是OpenCV3库。
默认include目录
  上面其中有个细节是,opencv2安装在编译器默认include目录,上文专门指定了opencv3(头文件)所在路径,那么编译器在两者中优先选择哪个目录搜索
  如下是本电脑ubuntu14.04上,gcc和g++默认的include目录。
  

  hao@hao-Lenovo-G480:~$`gcc -print-prog-name=cc1plus` -v
  ignoringnonexistent directory"/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../x86_64-linux-gnu/include"
  #include"..." search starts here:
  #include<...> search starts here:
  /home/hao/rgbdslam_catkin_ws/devel/include
  /opt/ros/indigo/include
  /usr/include/c++/4.8
  /usr/include/x86_64-linux-gnu/c++/4.8
  /usr/include/c++/4.8/backward
  /usr/lib/gcc/x86_64-linux-gnu/4.8/include
   /usr/local/include
  /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed
   /usr/include
  Endof search list.
  

  hao@hao-Lenovo-G480:~$`g++ -print-prog-name=cc1plus` -v
  ignoringnonexistent directory"/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../x86_64-linux-gnu/include"
  #include"..." search starts here:
  #include<...> search starts here:
  /home/hao/rgbdslam_catkin_ws/devel/include
  /opt/ros/indigo/include
  /usr/include/c++/4.8
  /usr/include/x86_64-linux-gnu/c++/4.8
  /usr/include/c++/4.8/backward
  /usr/lib/gcc/x86_64-linux-gnu/4.8/include
   /usr/local/include
  /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed
   /usr/include
  Endof search list.
  ----------------------------------------------------------------------------------
  http://blog.csdn.net/sun172270102/article/details/50449241
  提到了#include语句的语法。由此,在.cpp中使用#include<>时,编译器最先搜索(-l指定目录gcc)(CMakeLists.txt中include_directories()指定的目录)
  因此,上文的结果是编译器先搜索并使用OpenCV3的头文件路径。
#include用法
  #include语句有两种方式包含头文件,分别是使用双引号""与左右尖括号<>。其区别是(对于不是使用完全文件路径名的)头文件的搜索顺序不同:
  使用双引号""的头文件的搜索顺序:

  •   包含该#include语句的源文件所在目录;
  •   包含该#include语句的源文件的已经打开的头文件的逆序;
  •   编译选项-I所指定的目录
  •   环境变量INCLUDE所定义的目录
  使用左右尖括号<>的头文件的搜索顺序:

  •   编译选项-I所指定的目录
  •   环境变量INCLUDE所定义的目录
include_directories
  include_directories命令可以指定当前添加的头文件搜索目录是添加在搜索目录列表最后还是最前面。默认是最后。
  include_directories( [AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...] )
  Bydefault the directories specified are appended onto the current listof directories. This default behavior can be changed by setting CMAKE_INCLUDE_DIRECTORIES_BEFORE to ON. By using  AFTERor BEFORE explicitly, you canselect between appending and prepending, independent of the default.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-408786-1-1.html 上篇帖子: Ubuntu下rsyslog集中收集mysql审计日志 下篇帖子: ubuntu安装navicat
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表