2013-04-18 16 views
12

Ho un problema nel collegare OpenCV in Xcode. Ho installato OpenCV con birra:Simboli indefiniti per l'errore architettura x86_64 durante il collegamento di OpenCV in Xcode

brew tap homebrew/science 
sudo brew install opencv 

ho iniziato un nuovo progetto Xcode a riga di comando, ha aggiunto /usr/local/lib e /usr/local/include alla libreria e intestazione percorso di ricerca. Ho anche aggiunto l'output di pkg-config --libs opencv a other linker options.

Ma quando provo a compilare questo piccolo programma di esempio:

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

ottengo il seguente errore di linker:

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 

Ma io sono in grado di compilare il programma sulla riga di comando utilizzando

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

Quindi penso che il problema sia il modo in cui Xcode è impostato. Ma non sono in grado di determinare quale sia esattamente la differenza tra il modo in cui Xcode compila e il mio argomento della linea di comando.

Qualcuno sa il motivo di questo errore o ha un'idea di cosa potrei provare a indagare sul problema?

risposta

27

In Xcode creare un nuovo gruppo all'interno del vostro progetto, fare clic su di esso, scegliere aggiungere file a Progetto, passare alla cartella /usr/local/lib e aggiungere le seguenti librerie di base:

libopencv_core.dylib, libopencv_ml.dylib, libopencv_video.dylib

Nelle versioni precedenti di OpenCV i nomi di libreria potrebbero essere:

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

(le librerie possono essere in un altro percorso a seconda del metodo utilizzato per l'installazione OpenCV sul vostro Mac)

Edit:.

Le linee di cui sopra non dovrebbe essere necessario se si includono le librerie dinamiche in fase di collegamento, come spiega l'OP.

Selezionare il progetto, andare alle impostazioni di generazione scheda, filtro C++ libreria standard, e impostare questo parametro per libstdC++ (GNU C++ libreria standard).

+0

questo produce lo stesso errore. Le mie librerie hanno un nome leggermente diverso. 'libopencv_core.dylib' Ma non penso che sia un problema. Inoltre, dovrebbe fare la differenza come esattamente li aggiungo? Usando l'opzione "altro linker" ho cercato di ricreare la mia versione della riga di comando nel miglior modo possibile. C'è un modo per verificare se xcode sta effettivamente utilizzando quelle librerie per il collegamento? – sietschie

+0

@sietschie Vedi la mia risposta modificata, ho aggiunto un'altra impostazione Xcode che potrebbe causare questo problema. –

+3

L'uso di 'libstdC++' risolve il problema. – sietschie

8

Ho impostato le impostazioni di generazione -> libreria standard C++ su predefinito del compilatore. Gli errori sono scomparsi.

+0

Grazie, stavo proprio avendo questo problema. Questo l'ha risolto per me! –

+0

libstdC++ non ha funzionato per me, ma il compilatore di default ha fatto –

0

Per quanto mi riguarda, io uso OpenCV in Xcode per iOS, e risolvo gli errori usando l'OpenCV attraverso pod installare piuttosto che quadro opencv offline.

È possibile avere una prova con l'aggiunta di testo OpenCV pod di seguito:

pod 'OpenCV', '2.4.9' 
Problemi correlati