写在前面
题主的环境:
ubuntu 16.04,ros kinetic ,我当前的 protoc 版本为3.4.0,
一、报错信息
编译调用 protobuf 时出现报错
error: #error This file was generated by an older version of protoc which is
根据报错提示,可以发现,当前的文件是用旧的 protobuf 版本产生的,也就是我们系统当前的版本太高了。
查看当前的 protobuf 版本
protoc --version
二、解决方法
具体操作为:
首先移除 原有的 protobuf :
cd /usr/local/include/google
sudo rm -rf protobuf
下载 protobuf-3.0.0 ;(我下载了protobuf-v3.10.0.zip ,按照所有步骤操作完成之后,如果还报版本不对的错误,说明这个v3.0.0 版本不对,需要根据下载更新的版本或者更旧的版本~~)
cd ~/Downloads/protobuf-3.0.0
./autogen.sh
./configure
make
make check
sudo make install
sudo ldconfig
至此可以继续编译相应工作空间。
三、相关报错解决方法
- 报错
#error This file was generated by a newer version of protoc which is
如果报错:
#error This file was generated by a newer version of protoc which is
根据报错提示,可以发现,当前的文件是用新的 protobuf 版本产生的,也就是我们系统当前的版本太低了。所以需要重新下载更高的版本,执行上述步骤重新安装。
- 执行
./autogen.sh
时,如果报错Failed to connect to googlemock.googlecode.com port 443: 连接超时
(这部分参考./autogen.sh
中的内容就很好理解了)
:~/third_library/protobuf-3.0.0$ ./autogen.sh
Google Mock not present. Fetching gmock-1.7.0 from the web...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:02:09 --:--:-- 0
curl: (7) Failed to connect to googlemock.googlecode.com port 443: 连接超时
这说明,通过终端下载 gmock-1.7.0.zip 失败,解决方法是之间通过 github 下载gmock 这个文件 here ,然后放到 protobuf-3.10.0/
文件夹下,并且 将文件夹 gmock-1.7.0/
改名为 gmock/
,然后再次执行 ./autogen.sh
指令。
参考链接:
[1] lc740390316. This file was generated by an older version of protoc 解决方法 [EB/OL]. https://blog.csdn.net/lc740390316/article/details/86493220, 2019-01-15/2022-03-24.