欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

gcc5+opencv4.0.1 玄学bug记录

程序员文章站 2022-03-20 17:38:33
近期需要使用OpenCV中的gpu加速的一些函数,需要重新编译OpenCV库文件. 由于本机安装的cuda9.0对编译器gcc的版本有要求,平时常用的gcc7.0用不了,所以选用了gcc5.5 . OpenCV编译过程很顺利,但是在调用OpenCV的工程中却报了OpenCV源代码的错,很多函数,变量 ......

近期需要使用opencv中的gpu加速的一些函数,需要重新编译opencv库文件. 由于本机安装的cuda9.0对编译器gcc的版本有要求,平时常用的gcc7.0用不了,所以选用了gcc5.5 . opencv编译过程很顺利,但是在调用opencv的工程中却报了opencv源代码的错,很多函数,变量无法识别. 就下边这几行简单的代码,

 1 #include <opencv2/core.hpp>
 2 #include <opencv2/imgproc.hpp>
 3 #include <opencv2/highgui.hpp>
 4 
 5 int main(int argc, const char *argv[])
 6 {
 7 
 8     cv::mat image = cv::imread("/home/codes/stereoreconstruction_v2/build/out.jpg");
 9     cv::imshow("selected", image);
10     cv::waitkey();
11 }

gcc5+opencv4.0.1 玄学bug记录

编译环境明明和刚刚编译opencv是一样的,而且更奇怪的是这个例程用gcc7可以顺利编译, 项目的其他依赖项限制了必须要用gcc5, 没办法,只有硬着头皮找原因.

确定项目关于opencv的路径设置都正常,焦头烂额之际,发现报错的第一个源码文件不是opencv的,而是c++0x-warning.h 说需要编译器和库文件支持c++11,查了一下gcc5.5是支持c++11的,没毛病,可是为什么还会出错?

想着老板安排的活又干不完了,旁边也没有可以请教的大神, 对着cmake gui我无助地快哭了. 转念又一想,可能gcc5.5没有默认支持c++11,而opencv 源码/头文件中有一些是c++11的特征,所以会识别不了.

随即在cmake 的cxxflags项加上-std=c++11,编译通过!

虽然经常写cmakelists,但是从来没有注意和编译器相关的一些配置选项,导致被这么个基础的问题困扰了两个多小时. 特在此记录以示警戒. 

短短的第一篇博客纪念血泪满满的两小时, 20:05:15