2012-10-07 4 views
12

I opencv mit Macports die Anweisungen hier folgende installiert haben: Compile OpenCV (2.3.1+) for OS X Lion/Mountain Lion with XcodeEinbinden von Bibliotheken OpenCV 2.4.2 auf Xcode 4.5.1

ich auch suchen haben und versucht, jede andere Variation davon auf Stack und Google, aber dies scheint hol mich am nächsten.

Es scheint für einige Dinge zu funktionieren, aber nicht für Beispielcode, der mit 2.4.2 ausgeliefert wird. Beachten Sie, dass ich ALL opencv 2.4.2 dylibs Link Binary mit Bibliotheken hinzugefügt habe.

Zum Beispiel werden die folgenden kompilieren und ausführen:

#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; 
} 

Allerdings, wenn ich versuchen, eine der Proben, wie zum Beispiel die display_image.cpp, Beispiel zu bauen, wie folgt, ich Linkfehler bekommen.

-nicht Work-

#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; 

} 

ich folgende Fehlermeldungen erhalten:

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) 

Irgendeine Idee, wie man dieses Problem beheben?

+0

Anthony und Marco gaben Ihnen die richtige Antwort unten. Es ist eines dieser Dinge, dass, sobald Sie es erfahren, Sie es für immer wissen. Sie sollten eine Antwort akzeptieren, um zukünftigen Besuchern zu helfen. – jww

Antwort

0

Versuchen Sie manuell das Verzeichnis hinzuzufügen, in dem Port alle Dylibs setzt (/opt/local/lib, wenn ich nicht falsch bin) in Build Settings -> Bibliothek Suchpfad. Dies sollte das Verbindungsproblem beheben.

+0

Danke, aber das hatte ich schon gemacht. Ohne es, bekomme ich einen anderen Fehler: ld: Bibliothek nicht gefunden für -lopencv_calib3d.2.4.2 Clang: Fehler: Linker-Befehl fehlgeschlagen mit Exit-Code 1 (verwenden Sie -v, um Aufruf zu sehen) – glerg

41

Ich hatte das gleiche Problem. Ein Build-Einstellungsstandard scheint in Xcode 4.5 anders zu sein.

Unter "Build-Einstellungen" -> Apple-LLVM Compiler 4.1 - Sprache>

C++ Standard Library: = Wechsel von libC++ (LLVM ...) zu libstdC++ (GNU C++. ..).

+0

Cool, danke! Für mich geht das. – tangqiaoboy

+0

Dies sollte die akzeptierte Antwort sein :) –

+0

Könntest du mehr über die Antwort entwickeln, die ich nicht verstanden habe, warum müssen wir von LLVM zu GNU C++ wechseln. @glerg akzeptiere die Antwort. – BRabbit27

3

Es ist sehr wahrscheinlich, dass OpenCV nicht mit C++ 11 Einstellungen kompiliert wurde, während das Programm ist. Setzen Sie den Build Ihres Tools ohne C++ 11-Schalter (d. H. -std = C++ 11 -stdlib = libC++).

Verwandte Themen