2012-10-07 13 views
12

Ho installato OpenCV con MacPorts seguendo le indicazioni qui: Compile OpenCV (2.3.1+) for OS X Lion/Mountain Lion with Xcodelibrerie OpenCV Collegamento 2.4.2 su Xcode 4.5.1

Ho anche cercare e provato ogni altra variante di questo su StackExchange e Google, ma questo sembra fammi più vicino

Sembra funzionare per alcune cose, ma non per il codice di esempio fornito con 2.4.2. Nota che ho aggiunto TUTTO opencv 2.4.2 dylibs Link binario con le librerie.

Ad esempio, il seguente compilare ed eseguire:

#include <opencv2/opencv.hpp> 
#include <opencv2/highgui/highgui.hpp> 

int main (int argc, char **argv) 
{ 
    cvNamedWindow("My Window", 1); 
    IplImage *img = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1); 
    CvFont font; 
    double hScale = 1.0; 
    double vScale = 1.0; 
    int lineWidth = 1; 
    cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX | CV_FONT_ITALIC, 
      hScale, vScale, 0, lineWidth); 
    cvPutText(img, "Hello World!", cvPoint(200, 400), &font, 
      cvScalar(255, 255, 0)); 
    cvShowImage("My Window", img); 
    cvWaitKey(); 
    return 0; 
} 

Tuttavia, quando cerco di costruire qualsiasi dei campioni, come ad esempio il display_image.cpp, ad esempio, come segue, ricevo errori di collegamento.

-Non lavoro-

#include <stdio.h> 
#include <iostream> 
#include "opencv2/imgproc/imgproc.hpp" 
#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/flann/miniflann.hpp" 

using namespace cv; // all the new API is put into "cv" namespace. Export its content 
using namespace std; 
using namespace cv::flann; 

static void help() 
{ 
    cout << 
    "\nThis program shows how to use cv::Mat and IplImages converting back and forth.\n" 
    "It shows reading of images, converting to planes and merging back, color conversion\n" 
    "and also iterating through pixels.\n" 
    "Call:\n" 
    "./image [image-name Default: lena.jpg]\n" << endl; 
} 

int main(int argc, char *argv[]) 
{ 
    help(); 
    const char* imagename = argc > 1 ? argv[1] : "lena.jpg"; 
    Mat img = imread(imagename); // the newer cvLoadImage alternative, MATLAB-style function 
    if(img.empty()) 
    { 
     fprintf(stderr, "Can not load image %s\n", imagename); 
     return -1; 
    } 
    if(!img.data) // check if the image has been loaded properly 
     return -1; 

    Mat img_yuv; 
    cvtColor(img, img_yuv, CV_BGR2YCrCb); // convert image to YUV color space. The output image will be created automatically 

    vector<Mat> planes; // Vector is template vector class, similar to STL's vector. It can store matrices too. 
    split(img_yuv, planes); // split the image into separate color planes 

    imshow("image with grain", img); 

    waitKey(); 

    return 0; 

} 

Ottengo i seguenti errori:

Undefined symbols for architecture x86_64: 
"cv::split(cv::Mat const&, std::__1::vector<cv::Mat, std::__1::allocator<cv::Mat> >&)", referenced from: 
    _main in main1.o 
"cv::imread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from: 
    _main in main1.o 
"cv::imshow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cv::_InputArray const&)", referenced from: 
    _main in main1.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Qualsiasi idea di come risolvere il problema?

+0

Anthony e Marco ti hanno dato la risposta corretta di seguito. È una di quelle cose che, una volta provata, la conosci per sempre. Dovresti accettare una risposta per aiutare i futuri visitatori. – jww

risposta

0

Prova ad aggiungere manualmente la directory in cui la porta mette tutti i dylibs (/opt/local/lib se non sbaglio) in Impostazioni di costruzione-> Percorso di ricerca della libreria. Questo dovrebbe risolvere il problema di collegamento.

+0

Grazie, ma l'avevo già fatto. Senza di esso, ottengo un errore diverso: ld: libreria non trovata per -lopencv_calib3d.2.4.2 clang: errore: comando linker non riuscito con codice di uscita 1 (usare -v per vedere l'invocazione) – glerg

41

Ho avuto lo stesso problema. Un'impostazione predefinita di configurazione sembra essere diversa in Xcode 4.5.

Sotto "Build Settings" -> Mela LLVM compilatore 4.1 - Lingua>

C++ Standard Library: = Cambiamento dal libC++ (LLVM ...) per libstdC++ (GNU C++. ..).

+0

Cool, grazie! Per me funziona. – tangqiaoboy

+0

Questa dovrebbe essere la risposta accettata :) –

+0

Potresti sviluppare di più sulla risposta Non ho capito perché dobbiamo passare da LLVM a GNU C++. @glerg accetta la risposta. – BRabbit27

3

È molto probabile che OpenCV non sia stato compilato con le impostazioni di C++ 11, mentre il programma è. Imposta la generazione del tuo strumento senza switch C++ 11 (ad es. -std = C++ 11 -stdlib = libC++).

Problemi correlati