2017-02-04 6 views
1

Ich beginne gerade mit OpenCV. Ich habe einen Raspberry Pi und die Pi-Kamera, und ich möchte OpenCV lernen, um in einem Machine Vision-Projekt zu verwenden. Ich schreibe den Code in C, bearbeitet mit vi, auf dem Raspberry Pi. Ich bin etwas neu in Linux und definitiv neu im Schreiben von Code in einem Texteditor und nicht in einer IDE!Fehler beim Verknüpfen von OpenCV-Bibliotheken

Ich konnte das OpenCV Repo von Github herunterladen und kompilieren es ohne viel Mühe. OpenCV (3.2.0) ist installiert.

Ich begann hier das Tutorial durch folgende: http://docs.opencv.org/2.4/doc/tutorials/introduction/linux_gcc_cmake/linux_gcc_cmake.html#linux-gcc-usage

ich den Code korrekt eingegeben, und machte dann die CMake-Datei.

Hier ist meine CMakeLists.txt Datei:

cmake_minimum_required(VERSION 2.8) 
project(DisplayImage) 
find_package(OpenCV COMPONENTS core imgproc highgui REQUIRED) 
add_executable(DisplayImage DisplayImage.cpp) 
target_link_libraries(DisplayImage ${OpenCCV_LIBS}) 
LINK_DIRECTORIES("/usr/local/lib") 

Ich habe versucht, das Projekt zu machen, aber es scheint, dass es eine Bibliothek Verknüpfung Fehler. Ich bin ein Neuling und habe Probleme festzustellen, ob es einen Versionskonflikt gibt, Bibliotheken fehlen oder nur der Linker nach Bibliotheken am falschen Ort sucht.

Hier ist der Ausgang, wenn der Befehl make gemacht wird:

[email protected]:~/Programming $ cmake . 
-- Found OpenCV: /usr/local (found version "3.2.0") found components:   core imgproc highgui 
-- Configuring done 
-- Generating done 
-- Build files have been written to: /home/pi/Programming 
[email protected]:~/Programming $ make 
[ 50%] Linking CXX executable DisplayImage 
CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o: In function `main': 
DisplayImage.cpp:(.text+0x6c): undefined reference to `cv::imread(cv::String const&, int)' 
DisplayImage.cpp:(.text+0xd4): undefined reference to `cv::namedWindow(cv::String const&, int)' 
DisplayImage.cpp:(.text+0x118): undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)' 
DisplayImage.cpp:(.text+0x138): undefined reference to `cv::waitKey(int)' 
CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o: In function `cv::String::String(char const*)': 
DisplayImage.cpp:(.text._ZN2cv6StringC2EPKc[_ZN2cv6StringC5EPKc]+0x50): undefined reference to `cv::String::allocate(unsigned int)' 
CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o: In function `cv::String::~String()': 
DisplayImage.cpp:(.text._ZN2cv6StringD2Ev[_ZN2cv6StringD5Ev]+0x14): undefined reference to `cv::String::deallocate()' 
CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o: In function `cv::String::operator=(cv::String const&)': 
DisplayImage.cpp: (.text._ZN2cv6StringaSERKS0_[_ZN2cv6StringaSERKS0_]+0x30): undefined reference to `cv::String::deallocate()' 
CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o: In function `cv::Mat::~Mat()': 
DisplayImage.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x3c): undefined reference to `cv::fastFree(void*)' 
CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o: In function `cv::Mat::operator=(cv::Mat const&)': 
DisplayImage.cpp:(.text._ZN2cv3MataSERKS0_[_ZN2cv3MataSERKS0_]+0x140): undefined reference to `cv::Mat::copySize(cv::Mat const&)' 
CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o: In function `cv::Mat::release()': 
DisplayImage.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x68): undefined reference to `cv::Mat::deallocate()' 
collect2: error: ld returned 1 exit status 
CMakeFiles/DisplayImage.dir/build.make:94: recipe for target 'DisplayImage' failed 
make[2]: *** [DisplayImage] Error 1 
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/DisplayImage.dir/all' failed 
make[1]: *** [CMakeFiles/DisplayImage.dir/all] Error 2 
Makefile:83: recipe for target 'all' failed 
make: *** [all] Error 2 
[email protected]:~/Programming $ 

Was kommt als nächstes? Was ist der Prozess zur Fehlerbehebung bei der Verknüpfung von Fehlern in Linux?/OpenCV Alle Einblicke, die Sie zur Verfügung stellen können, würden geschätzt werden!

Antwort

0

Ein paar Dinge ...

  • Sie OpenCVV_LIBS in Ihrem CMakeLists.txt

  • vertippt habe ich glaube, Sie brauchen auch include_directories(${OpenCV_INCLUDE_DIR})

  • Ich denke, out-of-Source- baut sind bevorzugt, was bedeutet, dass Sie ein Unterverzeichnis namens build nicht unter Versionskontrolle, sondern im Verzeichnis erstellen ectory enthält CMakeLists.txt, cd build und dann cmake ..

+0

Ehrfürchtig danke Mark, – FrankieForceps

+0

Ok korrigierte ich die OpenCV_LIBS in der CMakeLists.txt Datei und machte das Build-Verzeichnis, wie Sie vorgeschlagen. Geben Sie für die include_directories buchstäblich "OpenCV_INCLUDE_DIR" ein, oder soll das den Pfad zu einem OpenCV-Verzeichnis bedeuten? Ich bin mir nicht sicher, wie Path-Variablen in Linux/OpenCV funktionieren. Danke für all deine Hilfe! – FrankieForceps

Verwandte Themen