首页 > 解决方案 > 使用 GCC 和 Clang 构建 mediapipe 失败

问题描述

我正在尝试在 C++ 中构建 Mediapipe 的 Hello World 示例。这些是我在 .bash_profile 中的导出:

export PATH=$PATH:$(go env GOPATH)/bin
export GLOG_logtostderr=1
export CC=/usr/bin/clang
export CXX=/usr/bin/clang++
#export CC=/usr/bin/gcc
#export CXX=/usr/bin/g++
export BAZEL_CXXOPTS="-std=gnu++17"

然后我运行它,按照说明进行操作:

bazelisk 运行 --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 --sandbox_writable_path ~/.ccache --sandbox_debug --verbose_failures mediapipe/examples/desktop/hello_world:hello_world

此行的效果是“全局命名空间中没有名为'max'的成员”错误:

if (x->version == std::numeric_limits<uint32_t>::max()) {

那是在 Clang 上我只使用过,因为 GCC11 改变了它现在不包含的方式<limits>,因此 CC/CXX 变量设置为 gcc/g++,它给出“'::max' 尚未声明;你的意思是 std::max ?” 错误... Clang 是否进行了类似的更改?我在 Fedora 上,无法访问旧的 GCC10。

标签: c++gccclangbazelmediapipe

解决方案


mediapipe 依赖于旧版本的 abseil c++,它不包括在新版本上工作所需的提交。libstdc++因此,com_google_absl在 mediapipe WORKSPACE中需要更新。


推荐阅读