近期須要使用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