Máy tính của tôi đang chạy Ubuntu-16.04-LTS và OpenCV-2.4.13 đã được cài đặt trên đó. Tuy nhiên, tôi muốn sử dụng các chức năng của các phiên bản OpenCV mới hơn, chẳng hạn như OpenCV-3.2.0 mà không xóa phiên bản cũ hơn.Chạy nhiều phiên bản OpenCV trên cùng một máy tính
Cho đến nay tôi đã tải xuống OpenCV-3.2.0 và biên dịch và cài đặt nó. Tôi uing CMake để biên dịch OpenCV, vì vậy tôi đã thay đổi tập tin CMakeLists.txt
tôi để:
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})
Bây giờ, khi tôi chạy đôi chút mã này,
#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;
}
tôi nhận được
OpenCV version: 3.2.0
thay vì
OpenCV version 2.4.13
Vì vậy, tất cả mọi thứ có vẻ là theo thứ tự, trừ khi tôi bắt đầu chạy một số chức năng OpenCV thực tế như:
#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);
}
tôi nhận được tất cả các lỗi này tham khảo không xác định:
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
Có ai biết làm thế nào để giải quyết vấn đề này? Tôi nghĩ rằng vấn đề là tôi vẫn không liên kết tất cả các thư viện đúng trong CMakeLists.txt
. Ngoài ra, tôi tìm thấy a comment below this article đề cập đến một cái gì đó tương tự như những gì tôi đang gặp, nhưng tôi không hiểu the page containing the solution nó đang đề cập đến. Tôi rất mới với OpenCV và CMake, vì vậy hy vọng bạn có thể cung cấp cho tôi hướng dẫn rõ ràng nhất có thể. Tôi đã bị mắc kẹt trên này cho mãi mãi, vì vậy bất kỳ trợ giúp được đánh giá cao! Cảm ơn nhiều!
Sự đau đớn của việc định cấu hình hai phiên bản OpenCV của tôi. Tôi cảm thấy bạn. – Yotam
Nếu bạn quan tâm, bạn có thể chạy hai phiên bản trên vùng chứa Docker. Nó sẽ dễ dàng hơn nhiều để cấu hình nhiều phiên bản mà không ảnh hưởng đến các gói toàn hệ thống – Srinivas
@Srinivas Trong khi đó, công việc đó có vẻ hơi quá mức và nặng nề. –