Ubuntu 14.04.5编译安装OpenCV-2.4.13.5

  • 获取源代码
$ cd ~

$ git clone https://github.com/opencv/opencv.git

$ cd opencv

$ git checkout 2.4.13.5
  • 安装依赖库
$ sudo apt-get install -y cmake

#借助系统自带的opencv简化依赖安装步骤
$ sudo apt-get install -y libopencv-dev
  • 编译源代码
$ cd ~

$ cd opencv

$ mkdir build

$ cd build

$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

$ make -j 10

如果要生成DEB安装包,则上面的命令修改成

$ cd opencv

$ mkdir build

$ cd build

$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CPACK_BINARY_DEB=ON ..

$ make -j 10

$ sudo make install

$ sudo cpack runs

#最后在当前目录下生成DEB安装包
  • 替换已经安装的版本
$ sudo make install
  • 编译出错的处理

如果执行cmake时候出现如下错误信息

CMake Error at CMakeLists.txt:11 (message):
  

  FATAL: In-source builds are not allowed.

         You should create separate directory for build files.



-- Configuring incomplete, errors occurred!

则应该是在代码根目录下直接执行过cmake,导致根目录下生成了CMakeCache.txt,需要删除CMakeCache.txt再次执行编译即可。

相关链接


Ubuntu 14.04.5源代码编译ROS Indigo并建立自己的DEB安装源

正常情况下我们使用已经编译好的ROS安装包来安装配置默认的ROS环境,就可以比较好的完成工作了。具体参考Ubuntu14.04安装和配置ROS Indigo

但是在某些情况下,比如,我们需要替换或更新里面的某些默认安装包的版本(比如OpenCV)。

这种情况下,我们就只能重新从源代码开始编译,或者构建自己的安装源了。

$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

$ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade

$ sudo apt-get install python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential

$ sudo rosdep init

$ rosdep update

$ mkdir ~/ros_catkin_ws
$ cd ~/ros_catkin_ws

$ export ROS_VER_NAME=indigo
$ export OS_VER_NAME=trusty

#如果是全部重新编译,则删除整个src目录再进行操作
$ rosinstall_generator desktop_full --rosdistro $ROS_VER_NAME --deps --wet-only --tar > $ROS_VER_NAME-desktop-full-wet.rosinstall

$ wstool init -j8 src $ROS_VER_NAME-desktop-full-wet.rosinstall

$ rosdep install --from-paths src --ignore-src --rosdistro $ROS_VER_NAME -y

$ ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release

#如果想一步到位,安装到最终目录,请执行如下命令,主要是 --install-space /opt/ros/$ROS_VER_NAME
# sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/$ROS_VER_NAME

上面的操作是生成完整的文件,然后再拷贝到需要安装的最终目录(--install-space /opt/ros/$ROS_VER_NAME指定),但是并没有生成DEB格式的安装包。

如果我们需要建立自己的安装源,那么参照上面的操作,并且正常编译完成后,使用下面的步骤编译安装包:

$ export ROS_VER_NAME=indigo 
$ export OS_VER_NAME=trusty

#如果要生成deb安装包,需要按照顺序操作
$ sudo apt-get install python-bloom

#编译并安装基础核心模块
#-----------------------catkin-------------------------------
$ cd ~/ros_catkin_ws/src/catkin/

$ bloom-generate rosdebian --os-name ubuntu --os-version $OS_VER_NAME --ros-distro $ROS_VER_NAME

$ fakeroot debian/rules binary

#需要安装,后续的模块编译依赖前面编译的模块
$ sudo dpkg -i ~/ros_catkin_ws/src/ros-$ROS_VER_NAME-catkin*.deb

#部分Python模块依赖我们刚刚编译的模块,把路径加入,否在后续模块编译会报错
$ export PYTHONPATH=$PYTHONPATH:/opt/ros/indigo/lib/python2.7/dist-packages

#-----------------------genmsg-------------------------------
$ cd ~/ros_catkin_ws/src/genmsg/

$ bloom-generate rosdebian --os-name ubuntu --os-version $OS_VER_NAME --ros-distro $ROS_VER_NAME 

$ fakeroot debian/rules binary

$ sudo dpkg -i ~/ros_catkin_ws/src/ros-$ROS_VER_NAME-genmsg*.deb


#-----------------------genpy-------------------------------
$ cd ~/ros_catkin_ws/src/genpy/ 

$ bloom-generate rosdebian --os-name ubuntu --os-version $OS_VER_NAME --ros-distro $ROS_VER_NAME 

$ fakeroot debian/rules binary 

$ sudo dpkg -i ~/ros_catkin_ws/src/ros-$ROS_VER_NAME-genpy*.deb


#-----------------------gencpp------------------------------- 
$ cd ~/ros_catkin_ws/src/gencpp/ 

$ bloom-generate rosdebian --os-name ubuntu --os-version $OS_VER_NAME --ros-distro $ROS_VER_NAME 

$ fakeroot debian/rules binary 

$ sudo dpkg -i ~/ros_catkin_ws/src/ros-$ROS_VER_NAME-gencpp*.deb


#-----------------------genlisp------------------------------- 
$ cd ~/ros_catkin_ws/src/genlisp/ 

$ bloom-generate rosdebian --os-name ubuntu --os-version $OS_VER_NAME --ros-distro $ROS_VER_NAME 

$ fakeroot debian/rules binary 

$ sudo dpkg -i ~/ros_catkin_ws/src/ros-$ROS_VER_NAME-genlisp*.deb


#-----------------------message_generation------------------------------- 
$ cd ~/ros_catkin_ws/src/message_generation/

$ bloom-generate rosdebian --os-name ubuntu --os-version $OS_VER_NAME --ros-distro $ROS_VER_NAME

$ fakeroot debian/rules binary

$ sudo dpkg -i ~/ros_catkin_ws/src/ros-$ROS_VER_NAME-message-generation*.deb

#-----------------------message_runtime------------------------------- 
$ cd ~/ros_catkin_ws/src/message_runtime/

$ bloom-generate rosdebian --os-name ubuntu --os-version $OS_VER_NAME --ros-distro $ROS_VER_NAME

$ fakeroot debian/rules binary

$ sudo dpkg -i ~/ros_catkin_ws/src/ros-$ROS_VER_NAME-message-runtime*.deb

........................................................................

#-----------------------std_msgs------------------------------- 
$ cd ~/ros_catkin_ws/src/std_msgs/

$ bloom-generate rosdebian --os-name ubuntu --os-version $OS_VER_NAME --ros-distro $ROS_VER_NAME

$ fakeroot debian/rules binary

$ sudo dpkg -i ~/ros_catkin_ws/src/ros-$ROS_VER_NAME-std-msgs*.deb

至于如何建立自己的源,请参考:建立自己的apt-get源

对于替换OpenCV重新编译的情况,参考Ubuntu 14.04.5编译安装OpenCV-2.4.13.5,然后执行sudo apt-get remove libopencv-dev&&sudo apt-get autoremove && rm -rf ~/ros_catkin_ws/install_isolated 删除已经安装好的OpenCV以及临时文件,然后重新编译ROS源代码。最后可以从~/ros_catkin_ws/install_isolated/share/cv_bridge/cmake/cv_bridgeConfig.cmake中看到已经链接刚刚编译安装的OpenCV版本了。

参考链接