Visual Studio 2013 - openCV 3.0 库的 C++ 链接器错误

Visual Studios 2013 - C++ Linker Error with openCV 3.0 Libs

我的 Visual Studios 2013 上的 C++ 链接器存在问题 Windows8。我想在我的 Visual Studios 中使用 openCV 3.0。代码中的所有链接都将正常使用,并且 IntelliSense 会识别数据成员。但是如果我想编译程序,Visual Studios 会给我以下错误:

Fehler 1 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""private: char * __thiscall cv::String::allocate(unsigned int)" (?allocate@String@cv@@AAEPADI@Z)" in Funktion ""public: __thiscall cv::String::String(char const *)" (??0String@cv@@QAE@PBD@Z)". C:\Users\Marc\Documents\Workspaces\C++_VS\OpenCV_Test\OpenCV_Test\main.obj OpenCV_Test Fehler 2 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""private: void __thiscall cv::String::deallocate(void)" (?deallocate@String@cv@@AAEXXZ)" in Funktion ""public: __thiscall cv::String::~String(void)" (??1String@cv@@QAE@XZ)". C:\Users\Marc\Documents\Workspaces\C++_VS\OpenCV_Test\OpenCV_Test\main.obj OpenCV_Test Fehler 3 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall cv::CommandLineParser::CommandLineParser(int,char const * const * const,class cv::String const &)" (??0CommandLineParser@cv@@QAE@HQBQBDABVString@1@@Z)" in Funktion "_main". C:\Users\Marc\Documents\Workspaces\C++_VS\OpenCV_Test\OpenCV_Test\main.obj OpenCV_Test Fehler 4 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall cv::CommandLineParser::~CommandLineParser(void)" (??1CommandLineParser@cv@@QAE@XZ)" in Funktion "_main". C:\Users\Marc\Documents\Workspaces\C++_VS\OpenCV_Test\OpenCV_Test\main.obj OpenCV_Test Fehler 5 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""protected: void __thiscall cv::CommandLineParser::getByName(class cv::String const &,bool,int,void *)const " (?getByName@CommandLineParser@cv@@IBEXABVString@2@_NHPAX@Z)" in Funktion ""public: class cv::String __thiscall cv::CommandLineParser::get(class cv::String const &,bool)const " (??$get@VString@cv@@@CommandLineParser@cv@@QBE?AVString@1@ABV21@_N@Z)". C:\Users\Marc\Documents\Workspaces\C++_VS\OpenCV_Test\OpenCV_Test\main.obj OpenCV_Test Fehler 6 error LNK1120: 5 nicht aufgelöste Externe C:\Users\Marc\Documents\Workspaces\C++_VS\OpenCV_Test\Debug\OpenCV_Test.exe 1 1 OpenCV_Test

我按照以下指南安装了 openCV:http://www.minlabz.com/how-to-install-opencv-3-0-0-on-windows-7-and-configure-with-visual-studio-2014/

这是我用来测试 openCV 依赖项是否有效的小代码:

#include "opencv2\highgui\highgui.hpp"
#include "opencv2\core\core.hpp"
#include <stdio.h>

using namespace cv;

int main(int argc, const char** argv)
{
    const char* keyMap;
    //Standard image that will be used if dont exist arguments
    keyMap = "{path     |   |  }";

    //Reading the Callingarguments
    CommandLineParser parser(argc, argv, keyMap);
    String filename = parser.get<String>("path");
}

我希望我没有忘记一些简单的事情。

当您使用 visual studio 2013 和 cmake 安装 OpenCV 3 时,您会在

中找到 dll

\opencv\msvc\bin\Release 用于释放模式和 \opencv\build\include 中的 include,因此调用命令提示符并键入

cl /EHsc main.cpp /Fetest.exe /I D:\CPP_Libraries\opencv_3.0.0\build\include /link /LIBPATH:D:\CPP_Libraries\opencv_3.0.0\msvc\lib\Release opencv_core300.lib

使用此示例

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



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

    std::cout << "\n%%( Random Generator )%%\n"; 
    cv::Mat G = cv::Mat::ones(4,4, CV_64FC1);
    cv::Mat m = cv::Mat::zeros(1,1, CV_64FC1);
    cv::Mat s = cv::Mat::ones(1,1, CV_64FC1);
    std::cout << G << std::endl;
    cv::randn(G, m, s);
    std::cout << G << std::endl;

    return 0;
}

结果是

问题已解决

我重新解压了opencv,按照以下两个链接的步骤操作:

Install OpenCV 3.0 on Windows 8

Create an Visual Studio (2013) Project with openCV

遇到与原始 post 中显示的非常相似的编译错误消息后,我点击了上面的完整链接(在 Windows 8 上安装 OpenCV 3.0,创建一个 Visual Studio( 2013) openCV 项目).

虽然这并没有解决编译错误。

对我有用的是更改 OPENCV_DIR 环境变量以指向 openCV 的 x86 版本而不是 x64 版本。

如果你在x64环境下编译过opencv,我强烈建议你在Configuration Manager中更改x64平台(Visual studio)。我解决了同样的问题。enter image description here