Bug #62589
openFailure to build 18.2.0 on Ubuntu/Mantic
0%
Description
Hello,
I've encountered the following issues when building Ceph from source on Ubuntu/Mantic.
The first is a compiler issue, with g++ version:
```
/home/lmlg/src/ceph/src/seastar/src/util/log.cc:566:7: error: converting to ‘std::optional<std::unordered_map<seastar::basic_sstring<char, unsigned int, 15>, seastar::log_level> >’ from initializer list would use explicit constructor ‘constexpr std::optional<_Tp>::optional(std::in_place_t, Args&& ...) [with _Args = {}; typename std::enable_if<_and_v<std::is_constructible<_Tp, _Args ...> >, bool>::type <anonymous> = false; _Tp = std::unordered_map<seastar::basic_sstring<char, unsigned int, 15>, seastar::log_level>]’
566 | , logger_log_level(*this, "logger-log-level",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
567 | {{}},
| ~~~
568 | "Map of logger name to log level. The format is \"NAME0=LEVEL0[:NAME1=LEVEL1:...]\". "
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
569 | "Valid logger names can be queried with --help-loggers. "
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
570 | "Valid values for levels are trace, debug, info, warn, error. "
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
571 | "This option can be specified multiple times."
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
572 | )
| ~
/home/lmlg/src/ceph/src/seastar/src/util/log.cc:566:7: error: converting to ‘std::in_place_t’ from initializer list would use explicit constructor ‘constexpr std::in_place_t::in_place_t()’
```
This can be fixed by changing the double pair of brackets with the expression std::optional<log_level_map>()
.
The other issues apply when building on armhf.
1 - on the file src/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h:
There isn't a fallback implementation for armhf. I opted out to using clock_gettime(CLOCK_MONOTONIC)
, since there's no timestamp counter accessible from userspace, to my knowledge.
2 - on the file src/osd/OSDMap.cc:
There are a couple of calls to std::max
which are ambiguous because they are called with different types. This happens on line 6147 and 6154, where the variables n_prims
and n_aprims
are declared as auto
which leads to them being uint32_t
. They are then used in the call to std::max
with 64-bit integers, leading to the error. In order to fix this, I changed their types to uint64_t
.
3 - on the file src/cls/rgw/cls_rgw_types.h:
The call to encode(shard_rollover_date, bl)
is ambiguous. To fix this, simply cast `shard_rollover_date` to uint64_t
.
No data to display