VisualC 2010中的openCV 2.2 createButton LNK 2019错误

时间:2010-12-16 08:17:54

标签: visual-studio-2010 opencv

我一直在尝试使用openCV 2.2的新Qt函数(参见http://opencv.willowgarage.com/documentation/cpp/qt_new_functions.html#index-1384)来获取项目但我一直收到错误:

  

1> main.cpp 1> main.obj:错误   LNK2019:未解析的外部符号   “void __cdecl   CV :: displayStatusBar(类   的std :: basic_string的,类   std :: allocator> const&,class   的std :: basic_string的,类   std :: allocator> const&,int)“   (?displayStatusBar @ @@ CV YAXABV?$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@ @ 0H Z)   在函数_main中引用   1> C:\ Documents and Settings \ Orange \ my   文件\视觉工作室   2010 \ Projects \ FYP \ FYP.exe:致命   错误LNK1120:1个未解析的外部

我正在使用Visual Studio 2010,windows xp,qt 4.7.1和openCV 2.2 我已经在属性> Linker> Input下的项目设置中为openCV和qt添加了核心lib文件。我尝试编译并运行openCV代码时没有遇到任何问题,除非我尝试使用新的Qt函数,如displayStatusBar(...)和createButton(...)。我一直在寻找一个解决方案,我现在仍然找不到一个,因为openCV2.2最近刚刚发布。有没有人尝试过并遇到过这个问题并有解决方案?

顺便说一下,我想使用openCV提供的函数来创建简单的窗口和按钮而不是qt是因为我希望避免在openCV中的Mat数据类型和Qt中的QImage之间进行转换。

预先感谢任何回复。

附加代码:

#include <cv.h>
#include <highgui.h>

using namespace cv;

int main()
{
    namedWindow("Test", CV_WINDOW_AUTOSIZE);            
    // ...
    // Code links without problem when the following line is commented out.
    displayStatusBar("Test", "Hello World", 5000);  

    return 0;
}

1 个答案:

答案 0 :(得分:8)

我发现了问题所以我想我应该在这里发布一个答案,以便其他可能遇到同样问题的人受益。

基本上,默认情况下为OpenCv 2.2提供的二进制文件不包括Qt新函数。要启用它,需要下载OpenCv源并使用CMake生成包含Qt新函数的makefile和源,并从头开始编译源代码。

以下是大致的步骤:

  1. 首先,使用SDK从这里安装QT: http://qt.nokia.com/downloads/。注意:您需要将QT库和头文件添加到系统路径和链接器路径中,以便编译器可以找到它们。它不仅仅是下载和安装。对于Windows,请参阅:http://developer.qt.nokia.com/doc/qt-4.8/install-win.html以了解如何添加环境变量。您需要将它们设置为CMake以检测QT并生成正确的文件。对于Linux用户,请参阅:http://blog.sudobits.com/2010/06/30/how-to-install-qt-on-ubuntu-10-04/
  2. 从这里下载并安装CMake: http://cmake.org/cmake/resources/software.html
  3. 从这里下载OpenCV的操作系统源代码: http://opencv.willowgarage.com/wiki/
  4. 现在运行CMake的GUI并使用它来选择您所在的文件夹 已经提取了OpenCV源代码。选择您的操作系统类型 编译为Unix Makefile,Visual Studio解决方案,XCode 等
  5. 现在应该出现一个选项列表。 QT会有一个选项 以及使用openGL的QT。选择第一个和使用openGL的一个 如果你需要它。接下来,单击“配置”按钮,然后单击“生成”按钮 CMake的。然后将生成必要的项目文件。
  6. 取决于     您创建的项目类型(Unix Makefiles,Visual Studio项目     等等),您现在可以转到生成它们的文件夹     CMake并编译项目。对于例如如果你选择CMake     生成Visual Studio解决方案,会有一个Visual Studio     文件夹中的解决方案文件。打开它,然后选择Build All。如果你     选择Unix Makefiles只需在命令行调用“make”,然后调用“sudo make install”。
  7. 现在您只需要/ lib文件夹中的库和标题 / include文件夹中的文件。将这2个文件夹复制到您的身边 希望放置它们。对于例如在你输入“sudo make”之后,在Ubuntu上 安装“他们会被自动复制到/ usr / local / lib 和/ usr / local / include。对于Windows用户,他们将在 您在CMake中指定的文件夹。
  8. 要链接您的项目(无论是Visual Studio还是使用make in unix), 你必须告诉你的链接器在哪里找到libs和include 文件。您可以像下载OpenCV一样指定它们 二进制文件。
  9. 多数民众赞成。你现在应该有一个使用QT的OpenCV。

    OpenCv的网页上提供了如何从头开始编译的说明:http://opencv.willowgarage.com/wiki/InstallGuide