Error LNK1120 Solved After Removing Some Header, B

2019-09-06 01:43发布

问题:

Actually the coding below is what I tried to execute. When I tried to execute this using Microsoft Visual Studio 2012, there is an error.

Error error LNK2019: unresolved external symbol _cvPyrSegmentation referenced in function "void __cdecl START_SEGMENT(int)" (?START_SEGMENT@@YAXH@Z)

Error error LNK1120: 1 unresolved externals

But I asked my friend to execute this code using his laptop, it works just fine.No error. But he is using Microsoft Visual Studio 2010 instead of me using Visual Studio 2012..I wonder why there is an error when I execute this code but when my friend execute it, no error.

So I removed some header and the coding looks like the one that I ask from the beginning( from this Question.The one with ""Error error C3861: 'cvPyrSegmentation': identifier not found "".. After I removed some header, there is no more Error LNK1120. But there is ""Error error C3861: 'cvPyrSegmentation': identifier not found""...

Blank ...Too many error for a newbie.Learning process never be easy .yeahhh!

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc_c.h>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/legacy/legacy.hpp>
#include <stdio.h>

static void help(void)
{
  printf("\nThis program present the function of pyramid segmentation which is   
        cvcvPyrSegmentation()\n""we can controlled the value of threshold by creating 
        the taskbar\n""Usage :\n");            
}

IplImage*  image[2] = { 0, 0 }, *image0 = 0, *image1 = 0;
CvSize size;

int  w0, h0,i;
int  threshold1, threshold2;
int  l,level = 4;
int sthreshold1, sthreshold2;
int  l_comp;
int block_size = 1000;
float  parameter;
double threshold;
double rezult, min_rezult;
int filter = CV_GAUSSIAN_5x5;
CvConnectedComp *cur_comp, min_comp;
CvSeq *comp;
CvMemStorage *storage;

 CvPoint pt1, pt2;

  static void START_SEGMENT(int a)
{
   (void) a;
   cvPyrSegmentation(image0, image1, storage, &comp, level, threshold1+1,   
   threshold2+1);

  cvShowImage("Segmentation", image1);
}


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

  help();

  filename = argc == 2 ? argv[1] : (char*)"C:/Users/acer/Documents/Visual Studio  
  2012/Projects/me2.jpg";

  if( (image[0] = cvLoadImage( filename, 1)) == 0 )
{
    help();
    printf("Cannot load fileimage - %s\n", filename);
    return -1;
}


cvNamedWindow("Source", 0);
cvShowImage("Source", image[0]);

cvNamedWindow("Segmentation", 0);

storage = cvCreateMemStorage ( block_size );

image[0]->width &= -(1<<level);
image[0]->height &= -(1<<level);

image0 = cvCloneImage( image[0] );
image1 = cvCloneImage( image[0] );
// segmentation of the color image
l = 1;
threshold1 =255;
threshold2 =30;

START_SEGMENT(1);

sthreshold1 = cvCreateTrackbar("Threshold1", "Segmentation", &threshold1, 255,   
START_SEGMENT);
sthreshold2 = cvCreateTrackbar("Threshold2", "Segmentation",  &threshold2, 255, 
START_SEGMENT);

cvShowImage("Segmentation", image1);
cvWaitKey(0);

cvDestroyWindow("Segmentation");
cvDestroyWindow("Source");

cvReleaseMemStorage(&storage );

cvReleaseImage(&image[0]);
cvReleaseImage(&image0);
cvReleaseImage(&image1);

return 0;
}

#ifdef _EiC
main(1,"pyramid_segmentation.c");
#endif

回答1:

Having fixed your compilation problem, you now have a linker problem.

You need to follow the instructions in the OpenCV documentation to find out how to link their libraries to your binary.

You'll start with -lcv and potentially have to add some additional libraries.