Open icexin opened 1 year ago
没有人回复吗?future_lite
里面的use_coro
开关好像没用
我check下,看看是否可以关掉,但是现在我们编译都是用提供的编译镜像编译的,如果替换了c++版本,不知道是否会有其他坑
代码编译默认的应该是C++17,确实有些协成用到了c++20,但是这些默认是关闭的,你编译过程中有发现哪部分代码用到了c++20吗?贴出来我们处理一下。
Config.h文件里面的coroutine已经关掉了,编译器开关的-fcoroutines
没有打开
$ cat Config.h
#ifndef FUTURE_LITE_CONFIG_H
#define FUTURE_LITE_CONFIG_H
#define FUTURE_LITE_NOT_USE_COROUTINES 1
#endif
然后编译就报错了,其中一个地方是这样的:
bazel-out/k8-fastbuild/bin/external/havenask~override/aios/future_lite/_virtual_includes/future_lite_base/future_lite/coro/Traits.h:46:84: error: unknown type name 'co_await'
static int8_t test(std::remove_reference_t<decltype(std::declval<C>().operator co_await())>*);
^
bazel-out/k8-fastbuild/bin/external/havenask~override/aios/future_lite/_virtual_includes/future_lite_base/future_lite/coro/Traits.h:56:66: error: unknown type name 'co_await'
static int8_t test(std::remove_reference_t<decltype(operator co_await( std::declval<C>()))>*);
^
bazel-out/k8-fastbuild/bin/external/havenask~override/aios/future_lite/_virtual_includes/future_lite_base/future_lite/coro/Traits.h:66:56: error: unknown type name 'co_await'
return std::forward<Awaitable>(awaitable).operator co_await();
^
bazel-out/k8-fastbuild/bin/external/havenask~override/aios/future_lite/_virtual_includes/future_lite_base/future_lite/coro/Traits.h:72:21: error: unknown type name 'co_await'
return operator co_await(std::forward<Awaitable>(awaitable));
^
In file included from external/havenask~override/aios/storage/indexlib/index/inverted_index/truncate/TruncateMetaFileReaderCreator.cpp:20:
In file included from bazel-out/k8-fastbuild/bin/external/havenask~override/aios/storage/indexlib/file_system/file/_virtual_includes/interface/indexlib/file_system/file/FileReader.h:28:
In file included from bazel-out/k8-fastbuild/bin/external/havenask~override/aios/future_lite/_virtual_includes/future_lite_base/future_lite/coro/Lazy.h:28:
bazel-out/k8-fastbuild/bin/external/havenask~override/aios/future_lite/_virtual_includes/future_lite_base/future_lite/coro/CoAwait.h:89:48: error: use of undeclared identifier 'co_return'; did you mean 'return'?
static ViaCoroutine create(Executor* ex) { co_return; }
^~~~~~~~~
return
你编译的命令发一下,是直接执行的build.sh吗?
我换了一个镜像,里面是clang8,编译命令是 bazel build --config clang //aios/apps/facility/build_service:bs_local_job
你在加上 --config=havenask 试试
在你们提供的镜像里面--config=havenask
是ok的,这个没有问题。我的意思是co_await
这些在c++20里面才有的关键字不能通过开关开启或者关闭吗?
在你的镜像里面加上这个配置也有问题吗?
如果不用clang用gcc,会直接报gcc: error: unrecognized command line option '-fcoroutines'
,我的gcc是9.4.0
对应的Havenask是哪个版本,1.0.0吗?
master
代码里面我看使用clang编译会强制指定使用c++20,目前不建议使用clange编译,你看下我们的编译镜像里面的gcc和你的有什么差别
你们镜像里面的gcc版本是10.2.1
代码里面我看使用clang编译会强制指定使用c++20,目前不建议使用clange编译
我们这边的主要编译器是clang,这个会修吗?
这个目前还没有计划修,你将代码跟目录下的.bazelrc文件里面的build --define indexlib_coroutine=yes 去掉试试
这个目前还没有计划修,你将代码跟目录下的.bazelrc文件里面的build --define indexlib_coroutine=yes 去掉试试
这个试过了,没有效果,我看代码里面使用co_await
是hard code的。
现在c++20在业界还没有完全使用起来,强制依赖c++20可能有些激进,请问有没有开关能关掉这些特性,从而能用低于c++20的编译器编译。
谢谢!