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)
。
看到自己过去记录的笔记,才深刻地感受到自己的成长:joy: