title: Undefined symbols for architecture x86_64: "_cvHaarDetectObjects" Eclipse
body: <p>I'm trying to build the following sample code:</p>
  
  <pre><code>#include "cv.h"
  #include "highgui.h"
  
  #include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;string.h&gt;
  #include &lt;assert.h&gt;
  #include &lt;math.h&gt;
  #include &lt;float.h&gt;
  #include &lt;limits.h&gt;
  #include &lt;time.h&gt;
  #include &lt;ctype.h&gt;
  
  
  // Create a string that contains the exact cascade name
  const char* cascade_name = "/usr/share/src/OpenCV-2.3.1/data/haarcascades/haarcascade_frontalface_alt.xml";
   //   "C:/Program Files/OpenCV/data/haarcascades/haarcascade_frontalface_alt.xml";
  /*    "haarcascade_profileface.xml";*/
  
  
  // Function prototype for detecting and drawing an object from an image
  void detect_and_draw( IplImage* image );
  
  // Main function, defines the entry point for the program.
  int main( int argc, char** argv )
  {
  
      // Create a sample image
      IplImage *img = cvLoadImage("1.pgm");
  
      // Call the function to detect and draw the face positions
      detect_and_draw(img);
  
      // Wait for user input before quitting the program
      cvWaitKey();
  
      // Release the image
      cvReleaseImage(&amp;img);
  
      // Destroy the window previously created with filename: "result"
      cvDestroyWindow("result");
  
      // return 0 to indicate successfull execution of the program
      return 0;
  }
  
  // Function to detect and draw any faces that is present in an image
  void detect_and_draw( IplImage* img )
  {
  
      // Create memory for calculations
      static CvMemStorage* storage = 0;
  
      // Create a new Haar classifier
      static CvHaarClassifierCascade* cascade = 0;
  
      int scale = 1;
  
      // Create a new image based on the input image
      IplImage* temp = cvCreateImage( cvSize(img-&gt;width/scale,img-&gt;height/scale), 8, 3 );
  
      // Create two points to represent the face locations
      CvPoint pt1, pt2;
      int i;
  
      // Load the HaarClassifierCascade
      cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
  
      // Check whether the cascade has loaded successfully. Else report and error and quit
      if( !cascade )
      {
          fprintf( stderr, "ERROR: Could not load classifier cascade\n" );
          return;
      }
  
      // Allocate the memory storage
      storage = cvCreateMemStorage(0);
  
      // Create a new named window with title: result
      cvNamedWindow( "result", 1 );
  
      // Clear the memory storage which was used before
      cvClearMemStorage( storage );
  
      // Find whether the cascade is loaded, to find the faces. If yes, then:
      if( cascade )
      {
  
          // There can be more than one face in an image. So create a growable sequence of faces.
          // Detect the objects and store them in the sequence
          CvSeq* faces = cvHaarDetectObjects( img, cascade, storage,
                                              1.1, 2, CV_HAAR_DO_CANNY_PRUNING,
                                              cvSize(40, 40) );
  
          // Loop the number of faces found.
          for( i = 0; i &lt; (faces ? faces-&gt;total : 0); i++ )
          {
             // Create a new rectangle for drawing the face
              CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
  
              // Find the dimensions of the face,and scale it if necessary
              pt1.x = r-&gt;x*scale;
              pt2.x = (r-&gt;x+r-&gt;width)*scale;
              pt1.y = r-&gt;y*scale;
              pt2.y = (r-&gt;y+r-&gt;height)*scale;
  
              // Draw the rectangle in the input image
              cvRectangle( img, pt1, pt2, CV_RGB(255,0,0), 3, 8, 0 );
          }
      }
  
      // Show the image in the window named "result"
      cvShowImage( "result", img );
  
      // Release the temp image created.
      cvReleaseImage( &amp;temp );
  }
  </code></pre>
  
  <p>And the path /usr/share/src....is the right path where the xml file is. I've linked the opencv libraries: opencv_core, opencv_imgproc, opencv_highgui and opencv_video to eclipse (and I think they are correctly linked since I build other opencv projects in this way). But Eclipse keeps throwing the following errors:</p>
  
  <pre><code>Invoking: MacOS X C++ Linker
  g++ -L/usr/local/include/opencv -L/usr/local/include/opencv2 -L/usr/local/lib -o "OpenCVFace"  ./main.o   -lopencv_core -lopencv_highgui -lopencv_video -lopencv_imgproc
  Undefined symbols for architecture x86_64:
    "_cvHaarDetectObjects", referenced from:
        detect_and_draw(_IplImage*)     in main.o
  ld: symbol(s) not found for architecture x86_64
  collect2: ld returned 1 exit status
  make: *** [OpenCVFace] Error 1
  
  **** Build Finished ****
  </code></pre>
  
  <p>I can see the cvHaarDetectObjects function is highlighted in Eclipse (which turned to purple color). Any ideas of how to solve the problem? Thanks!</p>