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?
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
@sietschie Vedi la mia risposta modificata, ho aggiunto un'altra impostazione Xcode che potrebbe causare questo problema. –
L'uso di 'libstdC++' risolve il problema. – sietschie