环境:ubuntu16.04 ros-kinetic gazebo7.16
问题描述:安装了ros-kinetic,gazebo7,后面安装cartographer,再次编译工作空间时候,提示类似错误:
/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.
问题的原因:在安装cartographer时候,安装了新版本protoc,而gazebo7使用的protoc是老版本.
解决方式:卸载proto新版本,重装其对应gazebo的老版本.
步骤:
1)cd /usr/local/include/google //进入proto所在文件夹
2)sudo rm -rf protobuf //卸载该文件
3)下载安装包protobuf-2.6.1.tar.gz
下载地址:https://github.com/protocolbuffers/protobuf/releases/tag/v2.6.1
4)解压该压缩包并 cd 进去该文件夹
5)依次执行下面指令
$ ./autogen.sh
$ ./configure
$ make
$ make check
$ sudo make install
$ sudo ldconfig
6)现在重新编译工作空间时候,上面的错误不再提示了.
至于为什么删除新的protoc,而对于cartographer包运行没问题呢?个人认为,我们安装cartographer包只需编译一次就足够了,除非重装.那么,我们把那个protoc新版本换回老版本也是也是没有问题的.
好了,可以愉快使用cartographer包在gazebo7上面跑仿真建图了.
在这里记录,方便自己以后碰到也可以很快解决.毕竟好记性不如烂笔头.(20200615记)