Spa*_*ska 5 ubuntu protocol-buffers keras tensorflow
我正在努力解决这个错误:
[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'
Run Code Online (Sandbox Code Playgroud)
很明显,它告诉我要更新“Protobuf 运行时库”,但我不知道如何实现。有人可以帮我吗?
我没有自己编译 tensorflow,我也不打算这样做。
我在一个 python 脚本中,试图通过 keras 库训练一个 tensorflow 模型;此行导致错误:
keras.callbacks.TensorBoard(log_dir=self.log_dir, histogram_freq=0, write_graph=True, write_images=False)
Run Code Online (Sandbox Code Playgroud)
继续运行 Ubuntu 17.10 artful
在这里,我分享一些我在尝试调试时使用的命令的输出:
(venv) $ pip show protobuf
Name: protobuf
Version: 3.6.1
Summary: Protocol Buffers
Run Code Online (Sandbox Code Playgroud)
protoc 也很好(但我需要“运行时库”,它与“编译器”不同,我猜)
$ protoc --version
libprotoc 3.6.1
$ which protoc
/usr/local/bin/protoc
Run Code Online (Sandbox Code Playgroud)
默认包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
Run Code Online (Sandbox Code Playgroud)
我不敢apt remove libprotobuf10
,因为它也会删除gnome-shell, ubuntu-desktop, ...
听起来有点危险的东西。
任何想法表示赞赏:)
您是否尝试删除旧的protoc
二进制文件并用新的二进制文件替换它?
删除旧版本protoc
:
$ sudo rm /usr/local/bin/protoc
Run Code Online (Sandbox Code Playgroud)
下载最新或所需版本的protoc
. 例如协议缓冲区 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
Run Code Online (Sandbox Code Playgroud)
移动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
更新:/usr/local/include/google/protobuf/*
如果您使用 gRPC,
同样适用。如果您正在更新protoc
编译器,那么您也应该更新那些 proto 文件。他们很少改变,但是……你永远不知道。
归档时间: |
|
查看次数: |
10126 次 |
最近记录: |