3

I need to compie and run a windows program that uses OpenCV. For that, I've downloaded and installed MS Visual Studio 2010. I confirmed that I can compile & run a Hello World terminal application.

Now, I've installed OpenCV and set up the Compiler and Linker paths accordingly. I wrote a little sample application:

#include "stdafx.h"
#include<opencv2/opencv.hpp>
#include<iostream>

using namespace cv;

int _tmain(int argc, _TCHAR* argv[])
{
    Mat img = imread("7MLS142.jpg");
    namedWindow("image", WINDOW_NORMAL);
    imshow("image", img);
    waitKey(0);
    return 0;
}

but get the following errors when I want to compile and run it:

1>------ Build started: Project: Hello_World, Configuration: Debug Win32 ------
1>Build started 2018-12-11 11:42:00 AM.
1>InitializeBuildStatus:
1>  Touching "Debug\Hello_World.unsuccessfulbuild".
1>ClCompile:
1>  All outputs are up-to-date.
1>  Hello_World.cpp
1>ManifestResourceCompile:
1>  All outputs are up-to-date.
1>Hello_World.obj : error LNK2019: unresolved external symbol "int __cdecl cv::waitKey(int)" (?waitKey@cv@@YAHH@Z) referenced in function _wmain
1>Hello_World.obj : error LNK2019: unresolved external symbol "void __cdecl cv::imshow(class cv::String const &,class cv::debug_build_guard::_InputArray const &)" (?imshow@cv@@YAXABVString@1@ABV_InputArray@debug_build_guard@1@@Z) referenced in function _wmain
1>Hello_World.obj : error LNK2019: unresolved external symbol "void __cdecl cv::namedWindow(class cv::String const &,int)" (?namedWindow@cv@@YAXABVString@1@H@Z) referenced in function _wmain
1>Hello_World.obj : error LNK2019: unresolved external symbol "class cv::Mat __cdecl cv::imread(class cv::String const &,int)" (?imread@cv@@YA?AVMat@1@ABVString@1@H@Z) referenced in function _wmain
1>Hello_World.obj : error LNK2019: unresolved external symbol "private: char * __thiscall cv::String::allocate(unsigned int)" (?allocate@String@cv@@AAEPADI@Z) referenced in function "public: __thiscall cv::String::String(char const *)" (??0String@cv@@QAE@PBD@Z)
1>Hello_World.obj : error LNK2019: unresolved external symbol "private: void __thiscall cv::String::deallocate(void)" (?deallocate@String@cv@@AAEXXZ) referenced in function "public: __thiscall cv::String::~String(void)" (??1String@cv@@QAE@XZ)
1>Hello_World.obj : error LNK2019: unresolved external symbol "void __cdecl cv::fastFree(void *)" (?fastFree@cv@@YAXPAX@Z) referenced in function "public: __thiscall cv::Mat::~Mat(void)" (??1Mat@cv@@QAE@XZ)
1>Hello_World.obj : error LNK2019: unresolved external symbol "public: void __thiscall cv::Mat::deallocate(void)" (?deallocate@Mat@cv@@QAEXXZ) referenced in function "public: void __thiscall cv::Mat::release(void)" (?release@Mat@cv@@QAEXXZ)
1>c:\users\rideo\src\visual studio 2010\Projects\Hello_World\Debug\Hello_World.exe : fatal error LNK1120: 8 unresolved externals
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:03.46

The Additional library path in the Linker setting is set to %OPENCV_DIR%\bin where I have set setx -m OPENCV_DIR C:\Users\rideo\opencv\build\x64\vc14 (There's a vc14 & a vc15) directory and I have installed 'Visual Studio 2010` - is that what's causing the problem here?

UPDATE

I've now installed MS Visual Studio Professional 2015, set C:\Users\rideo\opencv\build\x64\vc15`, opened the same project but still get:

1>------ Rebuild All started: Project: Hello_World, Configuration: Debug Win32 ------
1>Build started 2018-12-11 2:09:41 PM.
1>     1>
1>_PrepareForClean:
1>         Deleting file "Debug\Hello_World.tlog\Hello_World.lastbuildstate".
1>       InitializeBuildStatus:
1>         Touching "Debug\Hello_World.tlog\unsuccessfulbuild".
1>       ClCompile:
1>         stdafx.cpp
1>         Hello_World.cpp
1>     1>
1>Hello_World.obj : error LNK2019: unresolved external symbol "void __cdecl cv::fastFree(void *)" (?fastFree@cv@@YAXPAX@Z) referenced in function "public: __thiscall cv::Mat::~Mat(void)" (??1Mat@cv@@QAE@XZ)
1>     1>
1>Hello_World.obj : error LNK2019: unresolved external symbol "private: char * __thiscall cv::String::allocate(unsigned int)" (?allocate@String@cv@@AAEPADI@Z) referenced in function "public: __thiscall cv::String::String(char const *)" (??0String@cv@@QAE@PBD@Z)
1>     1>
1>Hello_World.obj : error LNK2019: unresolved external symbol "private: void __thiscall cv::String::deallocate(void)" (?deallocate@String@cv@@AAEXXZ) referenced in function "public: __thiscall cv::String::~String(void)" (??1String@cv@@QAE@XZ)
1>     1>
1>Hello_World.obj : error LNK2019: unresolved external symbol "public: void __thiscall cv::Mat::deallocate(void)" (?deallocate@Mat@cv@@QAEXXZ) referenced in function "public: void __thiscall cv::Mat::release(void)" (?release@Mat@cv@@QAEXXZ)
1>     1>
1>Hello_World.obj : error LNK2019: unresolved external symbol "class cv::Mat __cdecl cv::imread(class cv::String const &,int)" (?imread@cv@@YA?AVMat@1@ABVString@1@H@Z) referenced in function _wmain
1>     1>
1>Hello_World.obj : error LNK2019: unresolved external symbol "void __cdecl cv::namedWindow(class cv::String const &,int)" (?namedWindow@cv@@YAXABVString@1@H@Z) referenced in function _wmain
1>     1>
1>Hello_World.obj : error LNK2019: unresolved external symbol "int __cdecl cv::waitKey(int)" (?waitKey@cv@@YAHH@Z) referenced in function _wmain
1>     1>
1>Hello_World.obj : error LNK2019: unresolved external symbol "void __cdecl cv::imshow(class cv::String const &,class cv::debug_build_guard::_InputArray const &)" (?imshow@cv@@YAXABVString@1@ABV_InputArray@debug_build_guard@1@@Z) referenced in function _wmain
1>     1>
1>C:\Users\rideo\src\visual studio 2010\Projects\Hello_World\Debug\Hello_World.exe : fatal error LNK1120: 8 unresolved externals
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:01.92
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========

This is with opencv-3.4.3-vc14_vc15.exe

tatmanblue
  • 1,176
  • 2
  • 14
  • 30
stdcerr
  • 13,725
  • 25
  • 71
  • 128

1 Answers1

2

vc14 is for the builds using Visual studio 2015.

But you have installed Visual studio 2010

For VS2010, the environment variable should be set using (depends on 32 bit or 64 bit)

setx -m OPENCV_DIR D:\OpenCV\Build\x86\vc10     (suggested for Visual Studio 2010 - 32 bit Windows)
setx -m OPENCV_DIR D:\OpenCV\Build\x64\vc10     (suggested for Visual Studio 2010 - 64 bit Windows)

Here is more guidance for using static or dynamic libraries:

https://docs.opencv.org/2.4/doc/tutorials/introduction/windows_install/windows_install.html#windowssetpathandenviromentvariable

And here is the detailed guide with screenshots, regarding all the required project settings that are required to use OpenCV in visual studio 2015 C++ projects.

https://www.opencv-srf.com/2017/11/install-opencv-with-visual-studio.html

Pavan Chandaka
  • 11,671
  • 5
  • 26
  • 34