如何更新Protobuf运行时库?

时间:2018-08-27 13:23:25

标签: ubuntu tensorflow keras protocol-buffers

我的问题

我正在为这个错误而苦苦挣扎:

[libprotobuf FATAL google/protobuf/stubs/common.cc:67]
This program requires version 3.4.0 of the Protocol Buffer runtime library,
but the installed version is 3.0.0.
Please update your library.  If you compiled the program yourself,
make sure that your headers are from the same version of Protocol Buffers as your
link-time library.
(Version verification failed in "external/protobuf_archive/src/google/protobuf/any.pb.cc".)
terminate called after throwing an instance of 'google::protobuf::FatalException'

很明显,这是在告诉我要更新“ Protobuf运行时库”,但我不知道如何完成此操作。有人可以帮我吗?

我自己没有编译张量流,也没有打算这样做。

我的上下文

我在python脚本中,试图通过keras库训练张量流模型;这行导致错误:

keras.callbacks.TensorBoard(log_dir=self.log_dir, histogram_freq=0, write_graph=True, write_images=False)

Ubuntu 17.10 artful上运行

在这里,我分享了一些我在尝试调试时使用的命令的输出:

(venv) $ pip show protobuf                          
  Name: protobuf           
  Version: 3.6.1           
  Summary: Protocol Buffers

协议也很好(但我需要“运行时库”,我想它不同于“编译器”)

$ protoc --version                                   
  libprotoc 3.6.1
$ which protoc
  /usr/local/bin/protoc

我的尝试

apt的默认软件包为libprotobuf10(版本:3.0.0)。 因此,我从这里https://launchpad.net/~maarten-fonville/+archive/ubuntu/protobuf安装了较新的版本,而错误消息中没有任何更改

$ sudo add-apt-repository ppa:maarten-fonville/protobuf
$ sudo apt update
$ sudo apt install libprotobuf15 # Version: 3.5.2
$ sudo apt install libprotobuf12 # Version: 3.4.1

我不敢apt remove libprotobuf10,因为它还会删除听起来很危险的gnome-shell, ubuntu-desktop, ...

任何想法表示赞赏:)

1 个答案:

答案 0 :(得分:0)

您是否尝试过删除旧的protoc二进制文件并将其替换为新的二进制文件?

删除旧版本的protoc

$ sudo rm /usr/local/bin/protoc

下载protoc的最新版本或必需版本。例如Protocol Buffers v3.9.1

将其提取到您喜欢的位置。

protoc-3.9.1-linux-x86_64/bin/protoc二进制文件复制回/usr/local/bin。该protoc文件就是您想要的二进制文件。

sudo mv /location/of/protoc-3.9.1-linux-x86_64/bin/protoc /usr/local/bin

protoc文件移动到/usr/local/bin之后,检查其权限,就像ls -la /usr/local/bin一样简单,然后查找该protoc文件。可能您想做sudo chown root:root /usr/local/bin/protoc

默认情况下它应该是可执行的,但是如果在某种奇怪的情况下它不是可执行文件,那么您可能想做sudo chmod +x /usr/local/bin/protoc

立即检查版本protoc --version

更新: 如果您使用的是gRPC,则同样适用于/usr/local/include/google/protobuf/*。如果要更新protoc编译器,则还应该更新那些原型文件。它们很少改变,但是...你永远不会知道。