Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OpenCV Build on Visual Studio LINK error

I have followed this tutorial here as mentioned exactly

I now try to run simple OpenCV code on Visual Studio but it I keep getting linker errors. I am trying this OpenCV tutorial in particular

Here is the error I keep getting :

   1>Linking...
1>LINK : warning LNK4067: ambiguous entry point; selected 'mainCRTStartup'
1>OpenCV_Proj.obj : error LNK2019: unresolved external symbol "int __cdecl cv::waitKey(int)" (?waitKey@cv@@YAHH@Z) referenced in function _main
1>OpenCV_Proj.obj : error LNK2019: unresolved external symbol "void __cdecl cv::imshow(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class cv::_InputArray const &)" (?imshow@cv@@YAXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV_InputArray@1@@Z) referenced in function _main
1>OpenCV_Proj.obj : error LNK2019: unresolved external symbol "public: __thiscall cv::_InputArray::_InputArray(class cv::Mat const &)" (??0_InputArray@cv@@QAE@ABVMat@1@@Z) referenced in function _main
1>OpenCV_Proj.obj : error LNK2019: unresolved external symbol "void __cdecl cv::namedWindow(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int)" (?namedWindow@cv@@YAXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) referenced in function _main
1>OpenCV_Proj.obj : error LNK2019: unresolved external symbol "class cv::Mat __cdecl cv::imread(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int)" (?imread@cv@@YA?AVMat@1@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) referenced in function _main
1>OpenCV_Proj.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>OpenCV_Proj.obj : error LNK2019: unresolved external symbol "public: void __thiscall cv::Mat::copySize(class cv::Mat const &)" (?copySize@Mat@cv@@QAEXABV12@@Z) referenced in function "public: class cv::Mat & __thiscall cv::Mat::operator=(class cv::Mat const &)" (??4Mat@cv@@QAEAAV01@ABV01@@Z)
1>OpenCV_Proj.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\Saher\Documents\Visual Studio 2008\Projects\OpenCV_Proj\Debug\OpenCV_Proj.exe : fatal error LNK1120: 8 unresolved externals``

For the following code :

// OpenCV_Proj.cpp : Defines the entry point for the console application.

//

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

using namespace cv;
using namespace std; 

int main( int argc, char** argv )
{ 
    if( argc != 2) 
    {
     cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
     return -1;
    }

    Mat image;
    image = imread(argv[1], CV_LOAD_IMAGE_COLOR);   // Read the file

    if(! image.data )                              // Check for invalid input
    {
        cout <<  "Could not open or find the image" << std::endl ;
        return -1;
    }

    namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
    imshow( "Display window", image );                   // Show our image inside it.

    waitKey(0);                                          // Wait for a keystroke in the window
    return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

I have been trying to get OpenCV to work for VS2008 for a while and any help regarding this issue will be apprectiated.

NOTE: In the readme file of the tutorial the following is what I followed:

1) Add build\bin and one of build\{x86|x64}\{vc9\vc10\mingw}\bin to your system path (to use DLLs)
   Add build\{x86|x64}\{vc9\vc10\mingw}\lib or
       build\{x86|x64}\{vc9\vc10\mingw}\staticlib as library directories to your linker settings,
   Add build\include and build\include\opencv as include directories to your compiler settings.



Any help with getting this to work is really appreciated.
like image 629
Saher Ahwal Avatar asked Mar 26 '12 06:03

Saher Ahwal


People also ask

How do I import OpenCV code into Visual Studio?

For editing the Path variable, you can go Control Panel > System > Advanced system settings. Then switch to "Advanced" tab in System Properties window and click "Environment Variables" button. At last, edit the Path variable of your account (add compiler and OpenCV binaries path).

How do I fix errors in Visual Studio 2019?

In Visual Studio 2019 Update 16.5 or later you can go to Tools > Options > Projects and Solutions > Build and Run and set 'On Run, when build or deployment error occurs' to one of the options below. Once this is set, running and debugging tests will honor this option as well.


3 Answers

Those symbols are defined inside the OpenCV libraries, so you need to configure the project and let the linker know which OpenCV libraries you are using.

At the very least you should add: opencv_core230.lib and opencv_highgui230.lib (for OpenCV 2.3.0)

For more info on how to do this on VS2010, check this tutorial.

like image 118
karlphillip Avatar answered Oct 06 '22 11:10

karlphillip


Go to properties->Linker->input and

add cv210.lib; cxcore210.lib; highgui210.lib;cvaux210.lib;

Your problem will be solved.

Have a happy coding....

like image 20
G453 Avatar answered Oct 06 '22 12:10

G453


I faced the same issue. After using dumpbin to see the exported symbols of highgui, I found that the linker is trying to link against a symbol that has debug_build_guard at the end.

If you built OPENCV in release mode, You cannot compile your application in DEBUG mode. Try flipping it to RELEASE and it magically works :)

like image 21
Poorna Shashank Avatar answered Oct 06 '22 13:10

Poorna Shashank