ubuntu - 如何更新 Protobuf 运行时库?

标签 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 运行时库”,但我不知道如何完成它。有人可以帮我解决这个问题吗?

我自己没有编译 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

我的尝试

默认包由aptlibprotobuf10 (版本: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/binprotoc 文件是您真正想要的二进制文件。

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/

相关文章:

python - 具有keras和多个序列的时间序列预测

ubuntu - 从挂起 Ubuntu Budgie 18.10 唤醒后黑屏

Android 模拟器在启动时挂起 - 使用带有英特尔虚拟化加速的 KVM

python - 在安装了 5 个不同 python 的 ubuntu 上正确使用 virtualenv

machine-learning - 用于机器学习的 5 个输入和 3 个输出特征

python - 为什么来自keras的CNN权重只是一维的?

python - 如何访问 PyCharm 方法弹出帮助?喜欢空闲

python - 在 Tensorflow 中将一组常量(一维数组)与一组矩阵(三维数组)相乘

python - TensorFlow 2.1 调用 cuInit : UNKNOWN ERROR (303) 失败

python - 值错误 : You are trying to load a weight file containing 6 layers into a model with 0