Skip to content

Instantly share code, notes, and snippets.

@taogashi
Last active January 29, 2021 05:31
Show Gist options
  • Save taogashi/688aa16d5368c86b0529 to your computer and use it in GitHub Desktop.
Save taogashi/688aa16d5368c86b0529 to your computer and use it in GitHub Desktop.
elegantly maintain both opencv2 and opencv3 in ubuntu

ubuntu14.04上同时安装了opencv2和opencv3。从前大部分的程序都用opencv2,想要尝试 openvc3里面的一个新的功能。想用cmake,尽可能地把版本切换弄得自动化一些。

opencv2.4.8是装ROS的时候附带安装的 其路径是:

/usr/include
/usr/lib/x86_64-linux-gnu

相关的配置文件:

/usr/share/OpenCV/OpenCVConfig.cmake
/usr/lib/x86_64-linux-gnu/pkgconfig/opencv.pc

opencv3是从源码编译后用checkinstall安装的,路径是:

/usr/local/include
/usr/local/lib

相关的配置文件:

/usr/local/share/OpenCV/OpenCVConfig.cmake
/usr/local/lib/pkgconfig/opencv.pc

然后问题就来了。 只安装了opencv2.4.8的情况下

find_package(PkgConfig REQUIRED)
pkg_check_modules(OpenCV REQUIRED opencv)

find_package(OpenCV REQUIRED)

都可以正确的设置相关变量并成功编译。

只安装了opencv2.4的情况下,

find_package(OpenCV 3.0.0 REQUIRED)

会报错。

pkg_check_modules(OpenCV REQUIRED opencv=3.0.0)

也会报错。

同时安装两个版本时, pkg_check_modules在不指定版本时,使用的是3.0,但是编译会报错。 指定了版本,无论是3.0还是2.4都会报错。

find_package不指定版本时,使用的是3.0,可以编译通过。 指定了3.0版本时可以编译通过。 指定2.4.8时,仍然会使用3.0,可以编译通过。 将3.0的.cmake文件移走,可以找到2.4但是编译会报错。

综上,用checkinstall安装了opencv3后,2.4.8没法用;pkg_check_modules没法用。

后来搞定了。先用dpkg卸载了opencv3。在编译opencv3的时候,另外指定了安装路径:

cmake -DCMAKE_BUILD_TYPE=RELEASE -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules -DCMAKE_INSTALL_PREFIX=./usr/local -DBUILD_EXAMPLES=ON ../

这样原来的程序都是可以正常链接到opencv2的,如果想使用opencv3的话,需要在运行cmake的shell中 export CMAKE_PREFIX_PATH,就是刚才指定的安装路径,要告诉cmake OpenCVConfig.cmake在哪里去找。 CMakeLists.txt中,用find_package(OpenCV 3.0.0 REQUIRED)

@taogashi
Copy link
Author

看到自己过去记录的笔记,才深刻地感受到自己的成长:joy:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment