zoukankan      html  css  js  c++  java
  • 彻底根治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 <opencv2opencv.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

      好了就可以了,大公告成

     

  • 相关阅读:
    使用 virtualenv/venv 和 pip 管理虚拟环境
    Python:virtualenv 和 venv 的区别
    Python | Get unique values from a list
    Python ORM 框架 Peewee 知识点
    python之配置日志的几种方式
    python 中的 None,知识点
    Gunicorn 知识点
    gunicorn部署flask的log处理
    Python 逻辑运算符(and、or、not)、成员运算符(in、not in)、身份运算符(is、is not)
    Python 中没有 null,用 None 表示
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/13939062.html
Copyright © 2011-2022 走看看