私のコンピュータではUbuntu-16.04-LTSが動作しており、OpenCV-2.4.13は既にインストールされています。しかし、OpenCVの新しいバージョン(OpenCV-3.2.0など、古いバージョンを削除せずに)の機能を使用したいと思います。OpenCVの複数のバージョンを同じコンピュータで実行する
これまでのところOpenCV-3.2.0をダウンロードしてコンパイルしてインストールしました。私はcmakeのは、OpenCVのをコンパイルするuingていますので、私はに私のCMakeLists.txt
ファイルを変更:私は、コードのこの小さな作品、
#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;
}
を実行したときに、私が取得今
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})
OpenCV version: 3.2.0
OpenCV version 2.4.13
私はこれらすべての未定義の参照エラーが発生します
#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);
}
:だからすべては、私のようないくつかの実際のOpenCVの関数の実行を開始する場合を除いて、順序であるように思わ
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
は、誰もが解決する方法を知っていますこの問題?問題は、私がまだCMakeLists.txt
にすべてのライブラリを正しくリンクしていないということです。また、私は経験しているものに似て何かを言及a comment below this articleを見つけましたが、私は理解していませんthe page containing the solutionそれは参照しています。 私はOpenCVとCMakeにはとても新しいので、できるだけ明示的に指示してください。私は永遠にこれに固執しているので、どんな助けも高く評価されています!どうもありがとうございました!
2つのOpenCVバージョンを構成するのは苦労します。君の気持ち、分かるよ。 – Yotam
興味があれば、Dockerコンテナで2つのバージョンを実行できます。システム全体のパッケージに影響を与えずに複数のバージョンを構成する方がはるかに簡単です – Srinivas
@Srinivasこれはちょっと過酷で重いように見えますが。 –