Mein Computer läuft Ubuntu-16.04-LTS und OpenCV-2.4.13 ist bereits auf dem Computer installiert. Allerdings würde ich gerne die Funktionalitäten neuer OpenCV-Versionen wie OpenCV-3.2.0 nutzen, ohne die ältere Version zu entfernen.Ausführen mehrerer Versionen von OpenCV auf demselben Computer
Bisher habe ich OpenCV-3.2.0 heruntergeladen und kompiliert und installiert. Ich bin uing CMake OpenCV zu kompilieren, also habe ich meine CMakeLists.txt
-Datei:
cmake_minimum_required (VERSION 3.2)
project(io)
find_package(OpenCV REQUIRED)
include_directories("/home/ubuntu/opencv-3.2.0/include") # directory of OpenCV-3.2.0
link_directories("/home/ubuntu/opencv-3.2.0/lib") # directory of OpenCV-3.2.0
add_executable(cv_io io.cpp)
target_link_libraries(cv_io ${OpenCV_LIBS})
Nun, wenn ich dieses kleine Stück Code ausführen,
#include <iostream>
#include "opencv2/core/version.hpp"
int main(int argc, char ** argv)
{
std::cout << "OpenCV version: "
<< CV_MAJOR_VERSION << "."
<< CV_MINOR_VERSION << "."
<< CV_SUBMINOR_VERSION
<< std::endl;
return 0;
}
ich
OpenCV version: 3.2.0
statt
OpenCV version 2.4.13
So scheint alles in Ordnung zu sein, außer wenn ich beginnen, einige tatsächliche OpenCV Funktionen wie Laufen:
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat img = cv::imread("ferrari.jpg");
cv::Mat dst;
cv::Sobel(img, dst, CV_32F, 1, 1);
cv::imwrite("ferrari_sobel.png", dst);
cv::VideoCapture input(0);
}
ich alle diese undefinierten Referenzfehler:
CMakeFiles/cv_io.dir/io.cpp.o: In function
main': io.cpp:(.text+0x40): undefined reference to
cv::imread(cv::String const&, int)' io.cpp:(.text+0xd4): undefined reference tocv::imwrite(cv::String const&, cv::_InputArray const&, std::vector<int, std::allocator<int> > const&)' CMakeFiles/cv_io.dir/io.cpp.o: In function
cv::String::String(char const*)': io.cpp:(.text._ZN2cv6StringC2EPKc[_ZN2cv6StringC5EPKc]+0x40): undefined reference tocv::String::allocate(unsigned long)' CMakeFiles/cv_io.dir/io.cpp.o: In function
cv::String::~String()': io.cpp:(.text._ZN2cv6StringD2Ev[_ZN2cv6StringD5Ev]+0x10): undefined reference tocv::String::deallocate()' CMakeFiles/cv_io.dir/io.cpp.o: In function
cv::String::operator=(cv::String const&)': io.cpp:(.text.ZN2cv6StringaSERKS0[ZN2cv6StringaSERKS0]+0x2c): undefined reference to `cv::String::deallocate()' collect2: error: ld returned 1 exit status CMakeFiles/cv_io.dir/build.make:121: recipe for target 'cv_io' failed make 2 : * [cv_io] Error 1 CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/cv_io.dir/all' failed make 1 : * [CMakeFiles/cv_io.dir/all] Error 2 Makefile:83: recipe for target 'all' failed make: *** [all] Error 2
Wer weiß, wie zu lösen dieses Problem? Ich denke, das Problem ist, dass ich immer noch nicht alle Bibliotheken richtig in der CMakeLists.txt
verknüpfen. Ich fand auch a comment below this article Erwähnung etwas ähnliches zu dem, was ich erfahre, aber ich verstehe nicht the page containing the solution es bezieht sich auf. Ich bin sehr neu zu OpenCV und CMake, also hoffentlich können Sie mir Anweisungen geben, die so explizit wie möglich sind. Ich bin seit Ewigkeiten dabei, also wird jede Hilfe sehr geschätzt! Vielen Dank!
Der Schmerz der Konfiguration von zwei OpenCV-Versionen. Ich kann das gut nachfühlen. – Yotam
Wenn Sie interessiert sind, können Sie zwei Versionen auf Docker-Containern ausführen. Es wäre viel einfacher, mehrere Versionen zu konfigurieren, ohne systemweite Pakete zu beeinflussen – Srinivas
@Srinivas Während das funktionieren sollte, scheint das ein wenig übertrieben und schwer. –