我的问题

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

[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运行时库”,但是我不知道如何完成此操作。有人可以帮我吗?

我自己没有编译tensorflow,也没有打算这样做。

我的背景

我在一个python脚本中,试图通过keras库训练一个Tensorflow模型;此行导致错误:
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也很好(但我需要“运行时库”,我猜它不同于“编译器”)
$ 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, ...

任何想法表示赞赏:)

最佳答案

您是否尝试过删除旧的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编译器,则还应该更新那些原型(prototype)文件。它们很少改变,但是...你永远不会知道。

关于ubuntu - 如何更新Protobuf运行时库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52040428/

10-10 19:36