在Windows 7 64位上使用MinGW gcc / g ++编译openCV 2.3.1程序

时间:2012-03-19 23:49:25

标签: windows opencv cmake mingw

一周以来,我一直在努力编译openCV程序。我已经尝试过在互联网上可能找到的一切。

我做的是:我已下载OpenCV-2.3.1-win-superpack.exe并关注this official installation guide

在CMake(gui)中,我的来源是:D:\ opencv和构建目标是:C:\ opencv。

我还将C:\ opencv \ install \ bin; C:\ opencv \ bin添加到我系统的PATH变量中。

我想要的是使用MinGW的gcc / g ++编译器在我的Windows操作系统上编译openCV程序。

我已经尝试了各种gcc / g ++参数,我在互联网上找到这些参数,并且几天玩-I和-L选项,编译器永远无法找到openCV函数或结构。

我想编译的内容:

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cv.h>
#include <highgui.h>

int main(int argc, char *argv[])
{
  // Nothing but create a window
  cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE); 
  cvMoveWindow("mainWin", 100, 100);
  cvWaitKey(0);
  return 0;
}

错误:

输入

gcc test.c -o test -I"C:\opencv\install\include" -I"C:\opencv\install\include\opencv" -L"C:\opencv\install\bin"

输出

...\ccK4MfHv.o:test.c:(.text+0xa0b): undefined reference to `cvFree_'

或者使用g ++:

输入

g++ test.c -o test -I"C:\opencv\install\include" -I"C:\opencv\install\include\opencv" -L"C:\opencv\install\bin"

输出

...\ccXCTKa1.o:test.c:(.text+0x1e): undefined reference to `cvNamedWindow'

旁注:尝试在VS2005中编译我得到了同样的错误。

感谢您的时间!

2 个答案:

答案 0 :(得分:5)

如果其他人需要解决这个问题,这里是我如何使用MinGW,MSYS和CMake在Windows 7 x64中编译已发布的OpenCV / HighGUI示例代码:

  1. 使用MinGW / MSYS / CMake从源代码构建OpenCV。这是因为我无法让OpenCV-win-SuperPack中的MinGW编译版本在MinGW / MSYS / Windows 7 x64中正确链接。

    完整参考,以下是我编译OpenCV的方法:

    • 确保您安装了最新的CMake(v2.6或更高版本)和MinGW(带有GCC,G ++和MSYS选项)
    • 如果你想要新的基于Qt的OpenCV HighGUI前端,你需要安装Qt 4(SDK)。
    • 下载OpenCV源码/超级包2.2或更高版本(我使用的是OpenCV-2.3.1-win-superpack.exe)
    • 将内容解压缩到[OPENCV_SOURCE_DIR](我把它放在C:/ opencv中,所以C:/ opencv / README应该有一个文件)
    • 在别处创建[OPENCV_BUILD_DIR]目录(我使用C:/ opencv / build / mingw)
    • 使用CMake-GUI工具,将源目录指定为[OPENCV_SOURCE_DIR],将构建目录指定为[OPENCV_BUILD_DIR],然后单击“配置”。
    • 您可能希望/需要调整选项(例如,我勾选“Qt”和“Qt-OpenGL”条目,然后再次单击“配置”,然后必须提供qmake可执行文件的路径)
    • 完成OpenCV的配置后,单击“生成”
    • 在MSYS终端中,浏览到[OPENCV_BUILD_DIR],并运行“make”来构建代码(这可能需要一段时间)
    • 一旦构建正确,运行“make install”,它将构建的代码/ libraries / include dirs收集到[OPENCV_BUILD_DIR] / install文件夹(如果在使用CMake-GUI时更改了相应的选项,则收集其他文件夹)工具)
    • 将[OPENCV_BUILD_DIR] / install / bin文件夹添加到PATH环境变量中。如果您不知道如何执行此操作,那么我建议您使用路径编辑器GUI工具。
    • 如果你最终使用Qt,你还需要将Qt SDK的bin文件夹放在PATH环境变量中。这是包含qmake.exe的文件夹。
  2. 将以下示例代码放入名为test.c的文件中。我稍微修改了包含,使它们与OpenCV v2.2及更高版本兼容。

     #include <stdlib.h>
     #include <stdio.h>
     #include <math.h>
     #include <opencv/cv.h>
     #include <opencv/highgui.h>
    
     int main(int argc, char *argv[])
     {
       // Nothing but create a window
       cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE); 
       cvMoveWindow("mainWin", 100, 100);
       cvWaitKey(0);
       return 0;
     } 
    
  3. 在MSYS终端中,浏览到放置test.c的文件夹,然后运行:

    gcc -o test -I"[OPENCV_BUILD_DIR]/install/include" test.c \
      -L"[OPENCV_BUILD_DIR]/install/lib" \
      -lopencv_core[OPENCV_VERSION] \
      -lopencv_imgproc[OPENCV_VERSION] \
      -lopencv_highgui[OPENCV_VERSION]
    

    所以在我的情况下:

    gcc -o test -I"/c/opencv/build/mingw/install/include" test.c \
      -L"/c/opencv/build/mingw/install/lib" \
      -lopencv_core231
      -lopencv_imgproc231
      -lopencv_highgui231
    
  4. 路径编辑器:http://www.redfernplace.com/software-projects/patheditor/

答案 1 :(得分:0)

您有C:\opencv\install\bin / gcc命令行上的库目录,但我认为您还需要指定要用作链接器输入的库同样。我不确定哪些库是OpenCV发行版的一部分,但是在您链接到的指令页面上的示例中,可能是:

g++

您可能必须添加一个或多个其他的(在 -lopencv_calib3d220.dll 目录中的名称模式lib*.a - 或者您应该传递的其他C:\opencv\install\bin目录在lib选项中。