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!
Ehrfürchtig danke Mark, – FrankieForceps
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