在编译与gazebo相关的包时常常会出现protoc版本冲突问题,从而导致编译失败,如下图:
In file included from /usr/include/gazebo7/gazebo/msgs/MessageTypes.hh:91:0,
from /usr/include/gazebo7/gazebo/msgs/msgs.hh:24,
from /usr/include/gazebo7/gazebo/physics/Entity.hh:28,
from /usr/include/gazebo7/gazebo/physics/Model.hh:32,
from /home/thesis/gazebo_animate_pose/animate_pose.cc:4:
/usr/include/gazebo7/gazebo/msgs/wrench_stamped.pb.h:17:2: error: #error This file was generated by an older version of protoc which is
/usr/include/gazebo7/gazebo/msgs/wrench_stamped.pb.h:18:2: error: #error incompatible with your Protocol Buffer headers. Please
/usr/include/gazebo7/gazebo/msgs/wrench_stamped.pb.h:19:2: error: #error regenerate this file with a newer version of protoc.
遇到此类问题的其中一个原因是,当前的protoc版本较高。
命令 protoc --version 可以查看当前protoc版本 。
我当前使用的是ubuntu 16.04,ros kinetic ,Gazebo版本为7.0。protoc需要确保版本为2.6.1,而我当前的为3.4.0,因此需要将系统中的protoc替换为2.6.1版本。
具体操作为:
1.$ cd /usr/local/include/google;
2.sudo rm -rf protobuf;
3.下载protobuf-2.6.1,here;(我下载了protobuf-2.6.1.zip)
4.$ ./autogen.sh;
5.$ ./configure;
6.$ make;
7.$ make check;
8.$ sudo make install;
9.$ sudo ldconfig;
至此可以继续编译相应工作区。