NetBeans 7.2安装MinGW以便使用OpenCV

4
我已经根据http://netbeans.org/community/releases/72/cpp-setup-instructions.html的说明,在我的电脑上安装了MinGW,并使用NetBeans 7.2“恢复默认设置”,它找到了所有必要的文件。但是,当我制作测试样例C++应用程序时,出现了以下错误:
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe: cannot find   -ladvapi32 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe: cannot find -lshell32 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe: cannot find -luser32 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe: cannot find -lkernel32 
collect2: ld returned 1 exit status 
make[2]: *** [dist/Debug/MinGW-Windows/welcome_1.exe] Error 1 
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

有人能帮我安装NetBeans的openCV和minGW吗?


是的,它们是... 而且我已经引用了它们... - Gligorijevic
首先,我上面描述的问题只需重新安装mingw即可解决。 但是,我尝试使用OpenCV和他们的预编译库进行工作,我使用了这个教程:http://www.thirumal.in/2012/01/using-opencv-231-with-netbeans-7-ide.html现在我遇到了与上述问题类似的问题: c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe: cannot find -lopencv_calib3d242.dll (对于我包含的所有.dll文件,列表都会继续)注意:我已将所有应该添加到系统路径的内容添加到了系统路径中... - Gligorijevic
好的,我已经完成了,但现在出现了一些关于包含文件的错误: undefined reference to `cv::imread(std::string const&, int)'你认为我应该怎么改变引用? - Gligorijevic
你写道:“使用OpenCV的预编译库”,看起来你必须自己编译OpenCV。 - moskito-x
2个回答

7
如何构建和使用 openCV with Netbeans 7.2。一步步来。
准备工作:
在 "c:\mingw\bin" 和 "c:\mingw\lib" 中:
1. 搜索并删除所有 libopencv*.dll,libopencv*.dll.a,libopencv*.a。
2. 使用以下程序进行测试。
下载 OpenCV-2.4.2.exe (222.9 MB) http://sourceforge.net/projects/opencvlibrary/files/ 下载 mingw-get-inst-20120426.exe (662.7 kB) http://sourceforge.net/projects/mingw/files/ 下载 cmake-2.8.9-win32-x86.zip http://www.cmake.org/files/v2.8/cmake-2.8.9-win32-x86.zip 所有本手册中提到的引用都以 "T:\" 开头,请更改为实际驱动器号!(通常是 "c:\")
C:\msys\1.0\src---(如果没有 "msys" ,请创建或使用 "C:\mingw\src")。
C:\mingw\bin
注意:我在 msys-mingw 环境中的新项目中始终使用 "C:\msys\1.0\src" 目录。为了有相同的条件,gcc 也应该是 "4.7.0" 而不是 "4.6.2" 请将 "C:\mingw\bin;C:\msys\1.0\bin;" 放在 PATH 的最前面。
正如您可能注意到的那样,您无法使用 OpenCV-2.4.2.exe 附带的库。因此,请完全忽略文件夹 "...\opencv\build\x86\mingw\bin" 和 "...\opencv\build\x86\mingw\lib"。
现在,让我们获取新的 mingw 文件。
启动 mingw-get-inst-20120426.exe 使用:下载最新存储库...
确保指定的目录是正确的,通常为 "C:\mingw"。 按照下面所述进行检查。 如果您还需要 msys,则还要选择 "MinGW 开发人员工具包"。

MinGW安装

现在,MinGW-Get下载所有新文件。(4.7.0)

运行“OpenCV-2.4.2.exe”

文件所在的文件夹应该是“c:\msys\1.0\src”。
这将把所有文件写入新目录“opencv”中。
新文件夹:C:\msys\1.0\src\opencv。从现在开始,这是我们的顶级目录

打开“cmake-2.8.9-win32-x86.zip”,并将文件复制到您的cmake文件夹中。

创建Makefiles

运行“C:\cmake\bin\cmake-gui.exe

  • A:设置所需字段,单击“配置”
  • B:设置,单击“下一步” 输入图像描述

  • 设置并单击“确定” 输入图像描述

可能出现的错误:PATH中找到sh.exe

  • A:错误“在PATH中找到sh.exe”
  • B:在“C:\ msys \ 1.0 \ bin”或“C:\ mingw \ bin”中搜索sh.exe并 将其重命名为“shxx.exe”

  • 再次单击“配置”。

输入图像描述

可能出现的错误:未设置CMAKE_MAKE_PROGRAM

  • 标记“CMAKE_MAKE_PROGRAM”,复制,单击“添加条目”

输入图像描述

  • 粘贴,设置并单击“确定”
  • 再次单击“配置”。

输入图像描述

现在应该可以使用了。 Cmake搜索编译器环境

输入图像描述

Cmake显示选项页面

  • 浏览红色选项。不要更改任何内容
  • 再次单击“配置”

输入图像描述

让我们生成Makefiles

  • 单击“生成”

图片描述

构建OpenCV

  • 打开“cmd”,进入目录“C:\ msys \ 1.0 \ src \ opencv \ build \ mingw”,然后输入“make”命令。

图片描述

请耐心等待!

在我的电脑上,大约需要4个小时的时间。

图片描述

检查所有文件是否在正确的位置

  • B: “*.dll” 文件应该在“C:\msys\1.0\src\opencv\build\mingw\bin”目录中
  • C: “*.dll.a” 文件应该在“C:\msys\1.0\src\opencv\build\mingw\lib”目录中

图片描述

构建OpenCV程序

  • 在“C:\ msys \ 1.0 \ src \ opencv”目录下创建一个名为“OpenCV-MakeC”的新文件夹
  • 在“OpenCV-MakeC”文件夹内创建一个“Makefile”和“imgdisplay.cpp”文件。

为了避免复制和粘贴错误,这里提供两个文件下载:

图片描述

Makefile

MKDIR_P = C:/msys/1.0/bin/mkdir -p
DESTDIRB = build/Debug
DESTDIRD = dist/Debug
LIBDIRCV = ../build/mingw/lib
CFLAGS = -O2
CXX = C:/mingw/bin/g++.exe
Applic = imgdisplay

ALL: imgdisd

imgdisd:
    $(CXX) $(CFLAGS) -c -g $(Applic).cpp -I../build/include -MMD -MP -MF $(DESTDIRB)/$(Applic).o.d -o $(DESTDIRB)/$(Applic).o
    $(CXX) $(CFLAGS) -o $(DESTDIRD)/$(Applic) $(DESTDIRB)/$(Applic).o -L../build/mingw/bin $(LIBDIRCV)/libopencv_calib3d242.dll.a $(LIBDIRCV)/libopencv_contrib242.dll.a $(LIBDIRCV)/libopencv_core242.dll.a \
    $(LIBDIRCV)/libopencv_features2d242.dll.a $(LIBDIRCV)/libopencv_flann242.dll.a $(LIBDIRCV)/libopencv_gpu242.dll.a $(LIBDIRCV)/libopencv_highgui242.dll.a $(LIBDIRCV)/libopencv_imgproc242.dll.a \
    $(LIBDIRCV)/libopencv_legacy242.dll.a $(LIBDIRCV)/libopencv_ml242.dll.a $(LIBDIRCV)/libopencv_nonfree242.dll.a $(LIBDIRCV)/libopencv_objdetect242.dll.a $(LIBDIRCV)/libopencv_photo242.dll.a \
    $(LIBDIRCV)/libopencv_stitching242.dll.a $(LIBDIRCV)/libopencv_ts242.a $(LIBDIRCV)/libopencv_video242.dll.a $(LIBDIRCV)/libopencv_videostab242.dll.a 
md:
    $(MKDIR_P) "$(DESTDIRB)"
    $(MKDIR_P) "$(DESTDIRD)"

imgdisplay.cpp

/* 
 * File:   imgdisplay.cpp
 * Author: Administrator
 *
 * Created on 14. September 2012, 01:12
 */

#include <cstdlib>
#include <opencv/cv.h>
#include <opencv/highgui.h>

using namespace std;

int main( int argc, char* argv[] ) 
{

    cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE); 
    cvMoveWindow("mainWin", 100, 100);
    IplImage* img;
    img = cvLoadImage("D:/grafik/Lightroom/light01.jpg");
    if (!img) {
        std::cout << "Could not open the image file" << std::endl;
        return -1;
    }
    cvShowImage("My Picture", img); 
    cvWaitKey(0);
    cvReleaseImage(&img);
    return 0;
}

Netbeans 7.2 创建项目

  • 文件 -- 新建项目

enter image description here

使用以下设置。

enter image description here

创建的项目

enter image description here

创建新目标

  • 在“Makefile”上右键单击

注意:如果出现错误:Makefile:12: *** missing separator. Stop.

主要是复制和粘贴错误!(确保每行开头没有空格,但有2个制表符)。

enter image description here

创建新文件夹

  • 在“Makefile”上右键单击
  • 使用新目标“md”

enter image description here

项目文件夹现在看起来像...

enter image description here

构建项目

enter image description here

调试项目

  • 复制所需的dll文件(C:\msys\1.0\src\opencv\build\mingw\bin 到 T:\msys\1.0\src\opencv\OpenCV-MakeC\dist\Debug)

enter image description here

  • 打开imgdisplay.cpp(双击)
  • 在第17行设置断点

    17 cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);

  • 单击调试按钮

enter image description here

程序停在第17行

enter image description here

未解决的标识符

如果.cpp文件的源代码如下所示

enter image description here

右键单击您的项目。
勾选 C/C++ Code As...
运行 Reparse Project

enter image description here

如果这不够用。
前往 Project Properties
按照说明填写 Include 输入框。

enter image description here

清理

  • 如果您将 sh.exe 重命名为 shxx.exe!请将其更名回来!
  • 如果您的 PATH 变量中有空格,请在空格周围加上引号(仅针对诸如 Visual Studio 等相关程序)。
    我知道它们并不是必要的,但其中一两个程序无法处理 PATH 中的空格!!
  • 关于

好的,我尝试了这个,在CMake构建过程中遇到了以下错误:未找到或指定CUDA_TOOLKIT_ROOT_DIR。 而且我的c:\mingw\bin文件夹中根本没有make.exe! - Gligorijevic
1
首先现在我们要更改PATH变量。您必须再次运行Cmake-gui.exe。不要忘记首先转到“文件”..删除缓存。再次运行“配置”,直到没有红色字段为止。然后运行“Generate”。只有这样不起作用,才将两个make.exe重命名为make-orig.exe,分别位于 C:\mingw\binC:\msys\1.0\bin 文件夹中。下载http://www.moskito-x.de/stack/files/make.exe并将其复制到两个文件夹中。运行`make`。 - moskito-x
1
看起来像是“复制粘贴”错误。下载后,只需将Makefile.zip重命名为Makefile!http://moskito-x.de/stack/files/Makefile.zip并将其放入项目文件夹中。 - moskito-x
1
哇,这真的起作用了!NetBeans显示了很多错误,但它仍然可以工作,太棒了。我将尝试使用新编译的库在NetBeans上设置参数。但无论如何,终于让它运行起来真是太好了!Moskito-x,非常感谢您的耐心和帮助,特别是上面这个伟大的答案(尽管我甚至在阅读时遇到了一些困难)...您一直是最有帮助的! - Gligorijevic
1
在“Code Assistance..C++ Compiler..Include Directories”中添加;C:/mingw/lib/gcc/mingw32/4.7.0/include/c++,放在;../build/include之后。 - moskito-x
显示剩余23条评论

2

我也遇到过这个问题,但是我使用的是 mingw32-make 而不是 make,然后就可以了。

您可以使用 mingw-get install mingw32-make 安装 mingw32-make


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接