c++ - 系统 libc 文件的 Clang 工具链失败

标签 c++ clang clang++ bazel

我为 Clang 编写了一个自定义 (cc_) 工具链。经过一些来回,我现在大部分时间都在工作。然而,它失败了:

undeclared inclusion(s) in rule '//foo:foo'
this rule is missing dependency declarations for the following files included by 'foo/foobar.cpp':
  '/usr/include/features.h'
  '/usr/include/stdc-predef.h'
  '/usr/include/x86_64-linux-gnu/sys/cdefs.h'
  '/usr/include/x86_64-linux-gnu/bits/wordsize.h'
  '/usr/include/x86_64-linux-gnu/gnu/stubs.h'
  '/usr/include/x86_64-linux-gnu/gnu/stubs-64.h'
  '/usr/include/stdint.h'
  '/usr/include/x86_64-linux-gnu/bits/wchar.h'
  '/usr/include/stdio.h'
  '/usr/include/x86_64-linux-gnu/bits/types.h'
  '/usr/include/x86_64-linux-gnu/bits/typesizes.h'
  '/usr/include/libio.h'
  '/usr/include/_G_config.h'
  '/usr/include/wchar.h'
  '/usr/include/x86_64-linux-gnu/bits/stdio_lim.h'
  '/usr/include/x86_64-linux-gnu/bits/sys_errlist.h'
  '/usr/include/math.h'
  '/usr/include/x86_64-linux-gnu/bits/math-vector.h'
  '/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h'
  '/usr/include/x86_64-linux-gnu/bits/huge_val.h'
  '/usr/include/x86_64-linux-gnu/bits/huge_valf.h'
  '/usr/include/x86_64-linux-gnu/bits/huge_vall.h'
  '/usr/include/x86_64-linux-gnu/bits/inf.h'
  '/usr/include/x86_64-linux-gnu/bits/nan.h'
  '/usr/include/x86_64-linux-gnu/bits/mathdef.h'
  '/usr/include/x86_64-linux-gnu/bits/mathcalls.h'
  '/usr/include/assert.h'
  '/usr/include/string.h'
  '/usr/include/xlocale.h'

那么应该如何处理这些文件呢?简单地为工具链硬编码这些?或者是否有一个开关可以忽略系统的依赖性(/usr)?或者更确切地说,使用像 muslnewlibbionic 这样的密封 libc。

编辑:


有关实际工具链的更多详细信息,请参阅:https://github.com/abergmeier/bazel_toolchains

最佳答案

您需要将编译器的内置包含路径放入 crosstool 原型(prototype)的 cxx_builtin_include_directory 字段中,以便 Bazel 知道在包含依赖项验证期间忽略它们。您可以通过运行类似的命令来查看 gcc 兼容编译器的内置包含路径

$ $CC -x c++ -v - -c -o /dev/null < /dev/null

并寻找类似的输出

#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/7
 /usr/include/x86_64-linux-gnu/c++/7
 /usr/include/c++/7/backward
 /usr/lib/gcc/x86_64-linux-gnu/7/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/7/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include

关于c++ - 系统 libc 文件的 Clang 工具链失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47078520/

相关文章:

c++ - Qt QLabel setPixmap 不需要的填充

c++ - 更改 clang 默认 c++ 版本(模式)

c - 如何使用 clang 为 block 实现自定义保留释放

c++ - 如何将非英语字符串写入文件并使用 C++ 从该文件中读取?

C++ 模板特化和继承

c++ - 无法使用大括号为 C++ 对赋值

c++ - 派生对象之间的特殊交互(即多重分派(dispatch))

c++ - 在 C++ 模板实例化中查找依赖名称

c++ - 如何自动打印输入的c++函数参数值

c++ inotify - 观看多个目录/子目录