gcc5+opencv4.0.1 "玄學"bug記錄

近期須要使用OpenCV中的gpu加速的一些函數,須要從新編譯OpenCV庫文件. 因爲本機安裝的cuda9.0對編譯器gcc的版本有要求,平時經常使用的gcc7.0用不了,因此選用了gcc5.5 . OpenCV編譯過程很順利,可是在調用OpenCV的工程中卻報了OpenCV源代碼的錯,不少函數,變量沒法識別. 就下邊這幾行簡單的代碼,c++

 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 }

編譯環境明明和剛剛編譯opencv是同樣的,並且更奇怪的是這個例程用gcc7能夠順利編譯, 項目的其餘依賴項限制了必需要用gcc5, 沒辦法,只有硬着頭皮找緣由.函數

肯定項目關於opencv的路徑設置都正常,焦頭爛額之際,發現報錯的第一個源碼文件不是opencv的,而是c++0x-warning.h 說須要編譯器和庫文件支持c++11,查了一下gcc5.5是支持c++11的,沒毛病,但是爲何還會出錯?ui

想着老闆安排的活又幹不完了,旁邊也沒有能夠請教的大神, 對着cmake gui我無助地快哭了. 轉念又一想,可能gcc5.5沒有默認支持c++11,而opencv 源碼/頭文件中有一些是c++11的特徵,因此會識別不了. spa

隨即在cmake 的CXXflags項加上-std=c++11,編譯經過!c++11

雖然常常寫cmakelists,可是歷來沒有注意和編譯器相關的一些配置選項,致使被這麼個基礎的問題困擾了兩個多小時. 特在此記錄以示警惕. code

短短的第一篇博客記念血淚滿滿的兩小時, 20:05:15blog

相關文章
相關標籤/搜索