Ubuntu16.04下两个版本的protobuf简单兼容安装

Ubuntu16.04下两个版本的protobuf简单兼容安装

参考链接:
1.(https://blog.csdn.net/qq_16775293/article/details/81119375)
2.(https://blog.csdn.net/strangerzz/article/details/73850484)
3.(https://blog.csdn.net/dy_guox/article/details/79081499)

问题详述:

今天在试着在Ubuntu16.04上配置tensorflow的环境,以及Object Detection API,需要将下载tensorflow/models,将其剪切到tensorflow安装路径下,详细过程参考链接3。
而在运行以下步骤的时候出现错误:

# From tensorflow/models/research
protoc object_detection/protos/*.proto --python_out=.

参照网上一些教程将*换成tensorflow/models/research/object_detection/protos/内逐个proto文件运行上述命令,但在编译其中 ssd.proto 时也无法成功:

object_detection/protos/ssd.proto:104:3: Expected "required", "optional", or "repeated".
object_detection/protos/ssd.proto:104:12: Expected field name.
object_detection/protos/model.proto: Import "object_detection/protos/ssd.proto" was not found or had errors.
object_detection/protos/model.proto:12:5: "Ssd" is not defined.

经过查找,发现此处需要更新protobuf3.0以上的版本才可以完成。

解决方法:

考虑到ubuntu16.04自带的protobuf2.6.1,覆盖安装高版本会影响ROS等其他环境的使用,我们决定兼容安装,以及软链接的方法完成分开调用。
不考虑这问题的朋友可以参考链接1的覆盖安装。

下载解压安装:

1.以protobuf-3.6.1版本为例,下载protobuf-all-3.6.1.tar.gz解压。
下载链接

tar xvzf protobuf-all-3.6.1.tar.gz

2.安装
因为要和2.6.1区别开来,所以以下路径为例,在/usr下创建/protobuf文件夹并设置为安装路径

cd  protobuf-3.6.1
./autogen.sh
./configure  --prefix=/usr/protobuf
make -j8
make check -j8
sudo make install

3软链接生成

sudo ln -s /usr/protobuf/bin/protoc /usr/local/bin/protoc3.6.1

解释:/usr/protobuf/bin/protoc是我们3.6.1的可执行文件,我们生成链接文件为/usr/local/bin/protoc3.6.1,由于2.6.1对应的/usr/local/bin/protoc在同一路径内,所以此处不需要进行任何环境变量的修改,即可完成。

4测试
与2.6.1相似

protoc --version
                  libprotoc 2.6.1
protoc3.6.1 --version
                  libprotoc 3.6.1

对于本文前面关于Object Detection API的proto编译问题,可以简单解决:

# From tensorflow/models/research
protoc3.6.1 object_detection/protos/*.proto --python_out=.

如果有任何问题,包括tensorflow在ubuntu16.04上的环境配置问题,欢迎交流。

你可能感兴趣的:(环境配置)