前些天看@blocktrades大神的帖子,得知hived已经发布了HF26候选版第三版(v1.26.0rc3),并且如无意外的话,将在10月11号进行HF26硬分叉。
(图源 :pixabay)
没想到硬分叉时间已经这么近啦,看来要做一下准备,比如说编译并测试一下v1.26.0rc3了。
编译hived 失败
因为在编译文档中没有特别指明编译所依赖的版本,并且还有类似如下标题:
这导致我认为,和以往一样hived支持在Ubuntu 18.04上编译,并为此庆幸不已(我的N多系统都在运行Ubuntu 18.04)。
按着和以往(v1.25.0),一样的操作方法进行编译,首先发现一堆和压缩相关的库
hived将在HF26后支持block_log压缩,这是非常令人期望的特色。我撰写本文时,block_log已经占用了673G的空间,对于见证人以及节点维护者来讲,空间开销属实是有些大。如果block_log压缩后能节省大量空间,那将会省下一笔白花花的银子呢。
正在感慨一切都很顺利时,编译突然出错了:
出错原因 &解决方法
虽然出错信息一大堆,但是主要就是这句:
‘variant’ in namespace ‘std’ does not name a template type
而std::variant是c17之后的特色,所以出现这样的问题应该是编译器或者是编译参数的问题,比如加上(-std=c17)?
可是转念一想,不对呀,既然我遇到这个问题,那么别人编译时也应该遇到,那么他们是怎么解决的呢?
于是,把https://gitlab.syncad.com/hive/hive/ 下近期的Issues翻了个遍,奇怪的是,竟然没人遇到这个问题。😮 不过,在别人遇到的编译错误中看到这样几则回复内容:
另外,从以下截图中可以看到,hived编译确实要使用c++17标准:
所以,出错的原因已经锁定,解决方案也已经明了,也就是说:编译hived需要编译器支持c++17标准,最简单的方法就是升级系统到Ubuntu 20.04 LTS(据说之后的版本比如22.04也可以,不过稳妥起见,还是先用Ubuntu 20.04 LTS吧)。
眼花惹的祸 or 文档的锅?
确定这些之后,我又看了一眼hive的gitlab首页,竟然发现了如下内容:
Getting started with Hive is fairly simple. You can either choose to use docker-images, build with docker manually or build from source directly. All steps have been documented and while many different OS are supported, the easiest one is Ubuntu 20.04 LTS.
发现这里已经明确说明了,只支持Ubuntu 20.04 LTS及以后的版本。因为的眼花,没能及时注意到这个,才折腾这么久。
不过仔细想想,也不能全怪我眼花,毕竟编译文档中大标题写着Building on Ubuntu 18.04/20.04,所以我觉得文档也应该背锅。
(图源 :pixabay)
嗯,就这个愉快地决定了,这锅我甩出去了,谁爱背谁背,反正我不背!😀