如何在Windows上将OpenCV库正确链接到Eclipse?

时间:2016-05-15 12:41:38

标签: c++ eclipse opencv gcc g++

在过去的几个小时里,我一直在努力让一个基本的OpenCV程序在Eclipse Mars IDE中运行。该程序包含以下main.cpp:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main( int argc, char** argv )
{
  if( argc != 2)
  {
   cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
   return -1;
  } 

  Mat image;
  image = imread(argv[1], CV_LOAD_IMAGE_COLOR);   // Read the file

  if(! image.data )                              // Check for invalid input
  {
    cout <<  "Could not open or find the image" << std::endl ;
    return -1;
  }

  namedWindow( "Display window", WINDOW_AUTOSIZE );// Create a window for display.
  imshow( "Display window", image );                   // Show our image inside it.

  waitKey(0);                                          // Wait for a keystroke in the window
  return 0;
}

到目前为止我做了什么:

  1. 已安装MinGW(在E:\ NVPACK \ MinGW中)并将其bin文件路径添加到我的环境变量中。
  2. 在E:\ opencv安装OpenCV 2.4.12。已安装文件夹中的是“build”和“sources”文件夹。

  3. 使用MinGW GCC工具链创建了一个新的Eclipse C ++项目。

  4. 工具设置内部(项目属性 - &gt; C / C ++构建 - &gt;设置)我将GCC C ++编译器中的OpenCV库包含为“E:\ opencv \ build \ include”

  5. 在工具设置中,我在MinGW C ++ Linker中添加了所有库(即opencv_core2412,opencv_highgui2412,opencv_imgproc2412)并将库搜索路径设置为“E:\ opencv \ build \ x86 \ vc12 \ lib”< / p>

  6. 将我的二进制解析器设置为PE Windows Parser。

  7. 构建项目所有OpenCV函数都会得到未定义的引用错误,例如:

    undefined reference to `cv::imread(std::string const&, int)'    main.cpp    line 17 C/C++ Problem
    undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'   main.cpp    line 26 C/C++ Problem
    

    很奇怪,声明Mat图像不会出错并且将鼠标放在它上面会正确显示OpenCV的Mat文档。

    谷歌搜索问题我发现由于某种原因,我可能需要使用CMake来构建我自己的库文件(步骤5中使用的文件)。因此在安装CMake gui之后,我使用E:\ opencv \ sources作为源目录,并将新目录E:\ opencv \ MinGW作为我的构建目录。我使用“Eclipse CDT4 -MinGW Makefile”生成器来配置文件。按下配置后,我将收到g ++编译器的以下错误(类似于我的gcc编译器):

    CMake Error at CMakeLists.txt:71 (project):
    The CMAKE_CXX_COMPILER:
    
    E:/NVPACK/MinGW/bin/mingw32-g++
    
    is not a full path to an existing compiler tool.
    
    Tell CMake where to find the compiler by setting either the environment
    variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
    to the compiler, or to the compiler name if it is in the PATH.
    

    然而,编译器被识别:“CXX编译器标识是GNU 4.8.1”和“C编译器标识是GNU 4.8.1”

    非常感谢有关如何在Windows 7上的Eclipse Mars中正确设置OpenCV 2.4.12库的任何帮助!

3 个答案:

答案 0 :(得分:9)

好吧,我希望这个足够详细!首先,一大杯咖啡会有所帮助!

让我们开始吧:

要求:

  • github repo下载OpenCV源代码(将其解压缩到我们将命名为opencv_src_folder的文件夹)
  • 下载并安装MinGW(也将/ bin文件夹添加到系统路径)
  • 下载并安装CMake

步骤:

  • 打开CMake-gui

    • 将src文件夹设为opencv_src_folder
    • 将构建文件夹设置为opencv_src_folder/Mingw_build/
    • 点击configure,然后选择Eclipse CDT4 - MinGW MakeFile,然后选择<。li>
    • 如果配置成功,请点击generate
  • 打开命令行(Windows + R)

    • $ cd opencv_src_folder/Mingw_build/
    • $ mingw32-make: 这将使openGV使用MinGW,所以等到它完成了!
    • 现在,让我们安装它{$ {1}} 这将在opencv_src_folder / Mingw_build / install /
    • 中安装cmake
  • mingw32-make install添加到您的系统路径&amp;重启会话。

  • Eclipse配置:

    • 转到Eclipse CDT IDE,使用示例OpenCV代码创建C ++程序。
    • 转到项目&gt;属性&gt; C / C ++ Build&gt;设置&gt; GCC C ++编译器&gt;包含,并添加源OpenCV文件夹&#34; opencv_src_folder / Mingw_build / install / include /&#34;
    • 转到项目&gt;属性&gt; C / C ++ Build&gt;设置&gt; MinGW C ++ Linker&gt;库,并分别添加到库(-l):(不要忘记将245更改为用于lib文件的任何数字) opencv_calib3d245 opencv_contrib245 opencv_core245 opencv_features2d245 opencv_flann245 opencv_gpu245 opencv_highgui245 opencv_imgproc245 opencv_legacy245 opencv_ml245 opencv_nonfree245 opencv_objdetect245 opencv_photo245 opencv_stitching245 opencv_video245 opencv_videostab245

    • 将构建的OpenCV库文件夹opencv_src_folder/Mingw_build/install/bin/添加到库搜索路径(-L)。

测试:

您可以使用以下代码作为测试:

opencv_src_folder/Mingw_build/install/lib

最后建立你的项目!

希望有所帮助!

答案 1 :(得分:1)

上面的帖子真的很好,让我很亲密,但并非一直。以下是我采取的一些其他步骤,这些步骤终于对我有用。

构建和安装OpenCV的提示

注意::我是在Windows 10中构建的(在Mac上使用Parallel的桌面,但我认为这并不重要)

  1. 首先,我使用了Cmake 3.13.1版本并下载了最新的openCV存储库(上面的链接将您带到旧版本)。

  2. 确保每次使用Cmake-gui进行构建时,请清除缓存,然后从该文件夹中删除所有内容,或者创建一个新目录并在此新目录中进行构建(我个人做了第二个)

  3. 接下来,我从here下载了MinGW安装程序。但是在安装时,请改用以下配置

MinGW Configuration

经过大量Google搜索和阅读github问题后,我发现某人只能使用此配置的MinGW进行构建和安装,我也是如此。此外,当您安装此版本的MinGW并添加此文件时,路径,请确保您从系统路径中删除了当前正在使用的任何其他版本,并且也删除了该文件夹。当您运行Cmake-GUI时,只要按一下configure,它就可以告诉您它是使用新的MinGW库构建的,如果您正确执行了所有操作。

  1. 接下来,像往常一样添加到系统路径并重新启动命令提示符。

  2. 首次在Cmake-GUI中配置后,还请执行以下操作:

    • 搜索CMAKE_BUILD_TYPE,并在“值”列中添加“发布”(不带引号)

    • 搜索WITH_MSMF并取消选中它。

    • 搜索ENABLED_PRECOMPILED_HEADERS并取消选中它。

Eclipse配置提示

如上一篇文章所述,所有的日食对我都有效,除了我必须明确添加

在项目>属性> C / C ++构建>设置> GCC C ++编译器>其他>其他标志下的

--std=c++11标志

在添加此代码之前,每个带有openCV库的程序都会给我1000多个错误。

答案 2 :(得分:0)

关注最佳答案的人可能会在编译期间遇到问题,如下所示:

modules\highgui\CMakeFiles\opencv_highgui.dir\build.make:187: recipe for target 'modules/highgui/CMakeFiles/opencv_highgui.dir/src/window_w32.cpp.obj' failed
mingw32-make[2]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/src/window_w32.cpp.obj] Error 1
CMakeFiles\Makefile2:2203: recipe for target 'modules/highgui/CMakeFiles/opencv_highgui.dir/all' failed
mingw32-make[1]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/all] Error 2
Makefile:159: recipe for target 'all' failed
mingw32-make: *** [all] Error 2

如果发生这种情况,可以给出一个非常好的答案here

将其作为单独的可见性答案发布,对于那些来自谷歌(像我一样)有这个问题的人,否则他们会花20-30分钟尝试谷歌(就像我一样)。

编辑:

模块中的

/ highgui / src / window_w32.cpp

请在#endif和#include行之间添加此行

#  pragma GCC diagnostic ignored "-Wmissing-declarations"
#endif

/*start new code lines*/
#if (_WIN32_IE < 0x0500)
#pragma message("WARNING: Win32 UI needs to be compiled with _WIN32_IE >= 0x0500 (_WIN32_IE_IE50)")
#define _WIN32_IE 0x0500
#endif
/*end new code lines*/   

#include <commctrl.h>
#include <stdlib.h>
#include <string.h>