【问题标题】:Compiling openCV 2.3.1 programs with MinGW gcc/g++ on Windows 7 64bit在 Windows 7 64bit 上使用 MinGW gcc/g++ 编译 openCV 2.3.1 程序
【发布时间】:2012-03-19 23:49:24
【问题描述】:

一个星期以来,我一直在为编译 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 中编译我得到同样的错误。

感谢您的宝贵时间!

【问题讨论】:

    标签: windows opencv cmake mingw


    【解决方案1】:

    如果其他人需要解决此问题,以下是我如何使用 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 源代码/superpack 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”,它会将构建的代码/库/包含目录收集到 [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
      

    路径编辑器:http://www.redfernplace.com/software-projects/patheditor/

    【讨论】:

    • Linux 用户注意事项。新版本的 OpenCV 可能会在您的 repo 中找到,可能不需要下载源代码并制作它们。我的编译命令如下:gcc main.c -lopencv_core -lopencv_imgproc -lopencv_highgui -lm。如您所见,不需要尾随数字。
    • 缺少一些步骤:在 CMake 中,配置期间应该选择什么? MSYS 生成文件? MinGW 生成文件?
    【解决方案2】:

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

     -lopencv_calib3d220.dll
    

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

    【讨论】:

    • 抱歉耽搁了。我已经尝试了一切,它仍然无法编译。我已经转向 Python 而不是 C/C++,现在一切正常。感谢您的建议!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 2010-11-17
    • 2021-04-09
    • 2011-01-03
    相关资源
    最近更新 更多