CMake nicht finden, OpenCV-Bibliotheken

Ähnlich wie diese Frage, ich habe Probleme mit OpenCV und CMake auf OS X 10.10.3.

Nach viel Mühe habe ich es endlich geschafft zu bauen, die OpenCV 3.0 beta auf mein system; die Header wohne jetzt in /usr/local/include und die libs – wie Sie sollten – sind in /usr/local/lib. Ich habe kleine Programme, die Sie verwenden OpenCV, meine CMakeLists.txt sieht wie folgt aus

set( CMAKE_CXX_FLAGS         "-O3 -w" ) 
find_package( OpenCV REQUIRED )
if(OpenCV_FOUND)
   message("Found OpenCV")
   message("Includes: " ${OpenCV_INCLUDE_DIRS})
endif(OpenCV_FOUND)

add_executable( cannyDetector canny/canny.cpp )

target_link_libraries( cannyDetector ${OpenCV_LIBS} )

Ich bekomme die üblichen

Undefined symbols for architecture x86_64:
  "vtable for cv::_InputArray", referenced from:
      _main in correctImage.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for cv::_OutputArray", referenced from:
      _main in correctImage.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
make[2]: *** [correctImage] Error 1
make[1]: *** [CMakeFiles/correctImage.dir/all] Error 2
make: *** [all] Error 2

Die variable OpenCV_LIBS enthält

opencv_xphoto;opencv_xobjdetect;opencv_ximgproc;opencv_xfeatures2d;opencv_tracking;opencv_text;opencv_surface_matching;opencv_saliency;opencv_rgbd;opencv_reg;opencv_optflow;opencv_line_descriptor;opencv_latentsvm;opencv_ccalib;opencv_bioinspired;opencv_bgsegm;opencv_adas;opencv_videostab;opencv_videoio;opencv_video;opencv_ts;opencv_superres;opencv_stitching;opencv_shape;opencv_photo;opencv_objdetect;opencv_ml;opencv_imgproc;opencv_imgcodecs;opencv_highgui;opencv_hal;opencv_flann;opencv_features2d;opencv_core;opencv_calib3d

Auch, die manuelle Zusammenstellung funktioniert:

gcc -o canny $(pkg-config --cflags opencv3)  $(pkg-config --libs opencv3) -lstdc++ -w -O3  ../canny/canny.cpp

(Ich habe keine Ahnung, warum ich die angeben -lstdc++, aber ohne es, die Verknüpfung scheitert aus einem anderen Grund).
Beim laufen make VERBOSE=1, der folgende Befehl ausgeführt, für die ausführbare Datei:

/opt/local/bin/g++   -O3 -w -lstdc++ -Wl,-search_paths_first -Wl,-headerpad_max_install_names  CMakeFiles/cannyDetector.dir/canny/canny.o  -o cannyDetector  /usr/local/lib/libopencv_xphoto.3.0.0.dylib /usr/local/lib/libopencv_ximgproc.3.0.0.dylib /usr/local/lib/libopencv_tracking.3.0.0.dylib /usr/local/lib/libopencv_text.3.0.0.dylib /usr/local/lib/libopencv_surface_matching.3.0.0.dylib /usr/local/lib/libopencv_saliency.3.0.0.dylib /usr/local/lib/libopencv_rgbd.3.0.0.dylib /usr/local/lib/libopencv_reg.3.0.0.dylib /usr/local/lib/libopencv_optflow.3.0.0.dylib /usr/local/lib/libopencv_line_descriptor.3.0.0.dylib /usr/local/lib/libopencv_latentsvm.3.0.0.dylib /usr/local/lib/libopencv_ccalib.3.0.0.dylib /usr/local/lib/libopencv_bioinspired.3.0.0.dylib /usr/local/lib/libopencv_bgsegm.3.0.0.dylib /usr/local/lib/libopencv_adas.3.0.0.dylib /usr/local/lib/libopencv_videostab.3.0.0.dylib /usr/local/lib/libopencv_ts.a /usr/local/lib/libopencv_superres.3.0.0.dylib /usr/local/lib/libopencv_stitching.3.0.0.dylib /usr/local/lib/libopencv_photo.3.0.0.dylib /usr/local/lib/libopencv_objdetect.3.0.0.dylib /usr/local/lib/libopencv_hal.a /usr/local/lib/libopencv_xobjdetect.3.0.0.dylib /usr/local/lib/libopencv_xfeatures2d.3.0.0.dylib /usr/local/lib/libopencv_shape.3.0.0.dylib /usr/local/lib/libopencv_video.3.0.0.dylib /usr/local/lib/libopencv_calib3d.3.0.0.dylib /usr/local/lib/libopencv_features2d.3.0.0.dylib /usr/local/lib/libopencv_ml.3.0.0.dylib /usr/local/lib/libopencv_highgui.3.0.0.dylib /usr/local/lib/libopencv_videoio.3.0.0.dylib /usr/local/lib/libopencv_imgcodecs.3.0.0.dylib /usr/local/lib/libopencv_imgproc.3.0.0.dylib /usr/local/lib/libopencv_flann.3.0.0.dylib /usr/local/lib/libopencv_core.3.0.0.dylib /usr/local/lib/libopencv_hal.a -framework AGL -framework OpenGL /usr/local/share/OpenCV/3rdparty/lib/libippicv.a

Aber, wenn ich den Befehl und ersetzen Sie die input-Datei CMakeFiles/cannyDetector.dir/canny/canny.o von der Eingabedatei ../canny/canny.cpp - es funktioniert!

Also die Bibliotheken sind alle da, aber es immer noch nicht kompilieren, da der compiler kann link die Objekt-Datei, aber kompilieren und linken in einem Schritt funktioniert.

Kann jeder jeden schlagen, was ist hier Los?

  • Benutzen Sie make VERBOSE=yes um eine ausführliche Ausgabe an, wie cmake ruft den compiler
  • Haben Sie vielleicht gebaut OpenCV libs mit libstdc++ und CMake könnte versuchen libc++. Vorschlag: versuchen Sie set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libstdc++") für CMake Datei.
  • Du hast Recht soweit, die fahne ist definitiv erforderlich, aber seine Abwesenheit nicht den Fehler verursachen, aber die Tatsache, dass CMake weigert sich zu finden, die Bibliotheken, die in usr/local/lib.
  • Bitte fügen Sie message("OpenCV_LIBS=${OpenCV_LIBS}") und poste die Ausgabe. Prüfen Sie, ob Sie es tatsächlich geschafft zu bauen highgui: manchmal-Bibliothek deaktivieren (wegen einigen fehlenden 3rd-party-Bibliothek zum Beispiel) in OpenCV ist nicht so sichtbar. Auch, wenn Sie make VERBOSE=1 Sie, die tatsächliche sehen können linker-Befehlszeile.
  • Ich habe aktualisiert die Frage nach spiegeln die jüngsten änderungen in der Fehler ich erhalte, nach dem kompilieren der Bibliothek wieder. @Antonio Es ist definitiv kein problem von bestimmten libraries, die sind alle gebaut und fertig.
InformationsquelleAutor oarfish | 2015-05-02
Schreibe einen Kommentar