2013-04-18 8 views
12

Ich habe ein Problem beim Verknüpfen von OpenCV in Xcode. Ich installierte OpenCV mit brauen:Nicht definierte Symbole für Architektur x86_64 Fehler beim Verknüpfen von OpenCV in Xcode

brew tap homebrew/science 
sudo brew install opencv 

ich ein neues Xcode Command Projekt gestartet, hinzugefügt /usr/local/lib und /usr/local/include zur Bibliothek und Header-Suchpfad. Ich fügte auch die Ausgabe von pkg-config --libs opencv zu other linker options hinzu.

Aber wenn ich versuche, dieses kleine Beispielprogramm zu kompilieren:

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

int main(int argc, char *argv[]) 
{ 
    cv::Mat test; 
    cv::namedWindow("Display window", CV_WINDOW_AUTOSIZE);// Create a window for display. 
    cv::waitKey(0);           // Wait for a keystroke in the window 
    return 0; 
} 

bekomme ich folgende Linkerfehler:

Undefined symbols for architecture x86_64: 
    "cv::namedWindow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from: 
     _main in main.o 
ld: symbol(s) not found for architecture x86_64 

Aber ich bin in der Lage, das Programm auf der Kommandozeile zu kompilieren

mit
g++ `pkg-config --cflags --libs opencv` prog.cpp 

Also ich denke, das Problem ist die Art, wie Xcode eingerichtet ist. Aber ich bin nicht in der Lage zu bestimmen, was genau zwischen der Art, wie Xcode kompiliert, und meinem Kommandozeilenargument ist.

Kennt jemand den Grund für diesen Fehler oder hat eine Idee, was ich versuchen könnte, das Problem zu untersuchen?

Antwort

27

In Xcode erstellen Sie eine neue Gruppe in Ihrem Projekt mit der rechten klicken Sie wählen Dateien hinzufügen zu Projekt, zum /usr/local/lib Ordner navigieren und die folgenden grundlegenden Bibliotheken hinzufügen:

libopencv_core.dylib, libopencv_ml.dylib, libopencv_video.dylib

In früheren Versionen von OpenCV könnten die Bibliotheksnamen sein:

libcxcore.dylib, libcvaux.dylib, libcv.dylib, libhighgui.dylib, libml.dylib

(die Bibliotheken können in Abhängigkeit von der Methode, die Sie in einem anderen Pfad zum installieren OpenCV auf Ihrem Mac)

Edit:.

Die obigen Zeilen sollten nicht notwendig sein, wenn Sie die dynamischen Bibliotheken in der Verknüpfungsphase einschließlich als die OP erklärt.

Ihr Projekt wählen, gehen Sie zu den Build-Einstellungen Registerkarte Filter von C++ Standardbibliothek und diesen Parameter auf libstdC++ (GNU C++ Standard Library).

+0

Dies erzeugt den gleichen Fehler. Meine Bibliotheken sind etwas anders benannt. 'libopencv_core.dylib' Aber ich glaube nicht, dass das ein Problem ist. Außerdem, sollte es einen Unterschied machen, wie genau ich sie addiere? Mit der 'anderen Linker'-Option habe ich versucht, meine Kommandozeilenversion so gut wie möglich wiederherzustellen. Gibt es eine Möglichkeit zu überprüfen, ob xcode diese Bibliotheken tatsächlich zum Linken benutzt? – sietschie

+0

@sietschie Siehe meine bearbeitete Antwort. Ich habe eine weitere Xcode-Einstellung hinzugefügt, die dieses Problem möglicherweise verursacht. –

+3

Verwendung von 'libstdC++' behoben mein Problem. – sietschie

8

Ich habe die Build-Einstellungen -> C++ - Standard-Bibliothek auf Compiler-Standard festgelegt. Die Fehler sind verschwunden.

+0

Danke, ich hatte gerade dieses Problem. Das hat es für mich gelöst! –

+0

libstdC++ funktionierte nicht für mich, aber Compiler-Standard tat –

0

Für mich, ich benutze opencv in Xcode für iOS, und ich löse die Fehler, die durch die opencv durch pod mit installieren, statt offline opencv Rahmen.

Sie können einen Versuch durch den opencv pod-Text hinzufügen:

pod 'OpenCV', '2.4.9' 
Verwandte Themen