代码之家  ›  专栏  ›  技术社区  ›  vivkv

无法在编译期间链接opencv库

  •  0
  • vivkv  · 技术社区  · 8 年前

    this tutorial ,一切都很成功,但我编写了一个画圆的示例程序,

    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    using namespace cv;
    
    int main( )
    {    
      // Create black empty images
      Mat image = Mat::zeros( 400, 400, CV_8UC3 );
    
      // Draw a line 
      line( image, Point( 15, 20 ), Point( 70, 50), Scalar( 110, 220, 0 ),  2, 8 );
      imshow("Image",image);
    
      waitKey( 0 );
      return(0);
    }
    

    我弄错了。根据 this question ,我必须在编译程序时链接导入的库。但是在我的 MinGW/lib 文件夹没有这样的文件 opencv_core.a 或 opencv_highgui.a ,但我有 libopencv_core400.dll.a libopencv_highgui400.dll.a

    enter image description here

    所以,如果我试着选择 -lopencv_core 和 -lopencv_highgui

    D:\Programs\CppProgramming>g++ -lopencv_core -lopencv_highgui -std=c++11 OpenCVTest.cpp
    C:/Program Files (x86)/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/5.1.0/../../../../mingw32/bin/ld.exe: cannot find -lopencv_core
    C:/Program Files (x86)/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/5.1.0/../../../../mingw32/bin/ld.exe: cannot find -lopencv_highgui
    collect2.exe: error: ld returned 1 exit status
    

    -llibopencv_core400 以及- llibopencv_highgui400

    D:\Programs\CppProgramming>g++ -llibopencv_core400 -llibopencv_highgui400 -std=c++11 OpenCVTest.cpp
    C:\Users\vivek\AppData\Local\Temp\ccnjHIL5.o:OpenCVTest.cpp:(.text+0x80): undefined reference to `cv::Mat::zeros(int, int, int)'
    C:\Users\vivek\AppData\Local\Temp\ccnjHIL5.o:OpenCVTest.cpp:(.text+0x157): undefined reference to `cv::circle(cv::_InputOutputArray const&, cv::Point_<int>, int, cv::Scalar_<double> const&, int, int, int)'
    C:\Users\vivek\AppData\Local\Temp\ccnjHIL5.o:OpenCVTest.cpp:(.text+0x1c2): undefined reference to `cv::imshow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)'
    C:\Users\vivek\AppData\Local\Temp\ccnjHIL5.o:OpenCVTest.cpp:(.text+0x1f6): undefined reference to `cv::waitKey(int)'
    C:/Program Files (x86)/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/5.1.0/../../../../mingw32/bin/ld.exe: C:\Users\vivek\AppData\Local\Temp\ccnjHIL5.o: bad reloc address 0x12 in section `.text$_ZN2cv11_InputArrayC2Ev[__ZN2cv11_InputArrayC2Ev]'
    C:/Program Files (x86)/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/5.1.0/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
    collect2.exe: error: ld returned 1 exit status
    

    2 回复  |  直到 8 年前
        1
  •  0
  •   Sayed Sohan    8 年前

    如果你想自定义头或库并在代码块上运行,你需要添加链接器编译器。试试添加所有lib文件 设置-->编译器-->链接器设置

    我想这能解决你的问题。

    https://i.stack.imgur.com/xPVrO.png

        2
  •  0
  •   vivkv    8 年前

    按以下顺序使用下面的命令解决了我的编译问题

    g++ -std=c++11 OpenCVTest.cpp -llibopencv_core400 -llibopencv_highgui400 -llibopencv_imgproc400