我的问题
我正在为这个错误而苦苦挣扎:
[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
二进制文件的位置
which 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
现在检查协议(protocol)版本 protoc --version
更新:
如果您使用的是 gRPC,则同样适用于 /usr/local/include/google/protobuf/*
。如果您正在更新 protoc
编译器,那么您也应该更新那些 proto 文件。它们很少改变,但是……你永远不知道。
关于ubuntu - 如何更新 Protobuf 运行时库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52040428/