我正在为这个错误而苦苦挣扎:
[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, ...
。
任何想法表示赞赏:)
答案 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
编译器,则还应该更新那些原型文件。它们很少改变,但是...你永远不会知道。