Chromium编译错误记录
- Chromium默认用Clang编译,可通过如下命令改为用gcc/g++编译。
gn gen out/Default --args='is_clang=false'
- 采用gcc/g++编译chromium时,本文为Chromium67(g++/gcc,5.4.1),会遇到如下错误
could not convert '(const float*)(& quad->viz::TextureDrawQuad::vertex_opacity)' from 'const float*' to 'base::span<const float>'
- 定位到源码中 src/services/viz/public/cpp/composting/quads_struct_traits.h
static base::span<const float> vertex_opacity(const viz::DrawQuad& input) {
const viz::TextureDrawQuad* quad =
viz::TextureDrawQuad::MaterialCast(&input);
return quad->vertex_opacity;
}
- 从源码上看,没有什么问题。base::span是个模板,vertex_opacity是一个数组。导致,这个问题的原因,似乎是gcc/g++在这种情况时,无法解析正确的构造函数,也就是说gcc/g++,不知道怎么在两个类型间转换。
- 修改:综上所述,只要显式的告诉gcc/g++,两个类型间如何转换就就好了。
static base::span<const float> vertex_opacity(const viz::DrawQuad& input) {
const viz::TextureDrawQuad* quad =
viz::TextureDrawQuad::MaterialCast(&input);
return base::span<const float>(quad->vertex_opacity);
}