徹底根治opencv4中cblas沒有定義的錯誤


  最近在看人民郵電出版社的馮振的《OpenCV4快速入門》,在從源碼一路編譯完成OpenCV4.5的安裝后,cmake問題不大,但是make時,總會出現:

 1 make
 2 [ 50%] Linking CXX executable videoCapture
 3 /usr/bin/ld: /usr/local/lib/libopencv_core.so.4.5.0: undefined reference to `cblas_dgemm'
 4 /usr/bin/ld: /usr/local/lib/libopencv_core.so.4.5.0: undefined reference to `cblas_cgemm'
 5 /usr/bin/ld: /usr/local/lib/libopencv_core.so.4.5.0: undefined reference to `cblas_zgemm'
 6 /usr/bin/ld: /usr/local/lib/libopencv_core.so.4.5.0: undefined reference to `cblas_sgemm'
 7 collect2: 錯誤:ld 返回 1
 8 make[2]: *** [CMakeFiles/videoCapture.dir/build.make:118:videoCapture] 錯誤 1
 9 make[1]: *** [CMakeFiles/Makefile2:95:CMakeFiles/videoCapture.dir/all] 錯誤 2
10 make: *** [Makefile:103:all] 錯誤 2

 看下代碼videoCapture.cpp,來自書本上的代碼,吐槽下,該書中的\和/不分,希望看同本書的同志注意下,反正我在linux下沒有一次運行成功:

 1 #include <opencv2/opencv.hpp>              //#include <opencv2\opencv.hpp>原書的,實際時不對的,也許是我在linux下原因吧                                                      
 2 #include <iostream>
 3 
 4 using namespace std;
 5 using namespace cv;
 6 
 7 int main()
 8 {
 9     system("color F0");  //¸
10     VideoCapture video("cup.mp4");
11     if (video.isOpened())
12     {
13         cout << "視頻圖形寬度=" << video.get(CAP_PROP_FRAME_WIDTH) << endl;
14         cout << "視頻圖形高度=" << video.get(CAP_PROP_FRAME_HEIGHT) << endl;
15         cout << "視頻幀率=" << video.get(CAP_PROP_FPS) << endl;
16         cout << "視頻的總幀數=" << video.get(CAP_PROP_FRAME_COUNT);
17     }
18     else
19     {
20         cout << "請確認視頻文件名稱是否正確·" << endl;
21         return -1;
22     }
23     while (1)
24     {
25         Mat frame;
26         video >> frame;
27         if (frame.empty())
28         {
29             break;
30         }
31         imshow("video", frame);
32         waitKey(1000 / video.get(CAP_PROP_FPS));
33     }
34     waitKey();
35     return 0;
36 }

  CMakeLists.txt

 1 cmake_minimum_required(VERSION 2.6)
 2 #創建工程
 3 project(videoCapture)
 4 #C++版本為 11
 5 set(CMAKE_CXX_FLAGS "-std=c++11")
 6 #set(CMAKE_EXE_LINKER_FLAGS "-lcblas")
 7                                                                                         
 8 find_package(OpenCV 4.1.0 REQUIRED) #找 OpenCV 4.0 安裝路徑
 9 include_directories(${OpenCV_INCLUDE_DIRS}) #加載 OpenCV 4.0 的頭文件
10 
11 
12 add_executable(videoCapture VideoCapture.cpp) #將程序生成可執行文件
13 target_link_libraries(videoCapture ${OpenCV_LIBS}) #鏈接 lib 文件到可執行文件中

  當沒有第6行時,按照常規方法:

  mkdir  build  && cd build

  cmake ..

  make時總會出現文章開始的錯誤,原來的解決方法是在make時加上參數: -DCMAKE_EXE_LINKER_FLAGS=-lcblas

  后來覺得每次都要加上參數很不方便,就在CMakeLists.txt中加上第6行的內容后,編譯的步驟終於成為了:

  mkdir  build

  cd build

  cmake ..

  make

  好了就可以了,大公告成

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM