【问题标题】:Clang stdio,h file not foundClang stdio,h 文件未找到
【发布时间】:2018-01-21 17:20:01
【问题描述】:

我使用 Visual Studio 安装了 clang,然后按照文档中的说明构建了突出显示的项目。

构建成功,但是当我尝试这样做时:

clang -cc1 -analyze -analyzer-checker=core.DivideZero test.c

上面写着:

test.c:1:10: fatal error: 'stdio.h' file not found
#include <stdio.h>
         ^~~~~~~~~
1 error generated.

我尝试了很多建议,但都没有奏效。

但是,如果我做这样的事情,它会起作用

clang --analyze text.c

我不知道这是否使用了所有可用的检查器。我需要编写自己的检查器并对其进行测试...

有什么想法吗?

clang --version的输出

clang version 7.0.0 (trunk 322536)
Target: i686-pc-windows-msvc
Thread model: posix
InstalledDir: C:\path\build\Debug\bin

【问题讨论】:

  • 您需要在您的 cmd.exe 用户环境中设置您的路径以包含 clang 安装路径,并确保包含搜索路径与 /path/to/clang/include 所在的位置匹配。您还应该能够将-I/path/to/clang/include 添加到您的clang -cc1 ... 命令行(仔细检查clang 是否为此目的使用-I - 或使用提供的选项)
  • 如何找到“包含搜索路径”?
  • 它是一个环境变量,通常由 clang 或 VS 设置(它们每个都有一个默认的查找包含文件的位置)。每个还提供了一个命令行选项来指定在哪里查找它们。您必须查看 clang 安装到的位置(例如 c:\Program Files\clang\...c:\Program Files(x86)\clang\... 以找出安装位置。请参阅 Adding directory to PATH Environment Variable in Windows
  • InstalledDir: C:\path\build\Debug\bin 上面的输出中检查c:\path 下的输出(这似乎是一个非常奇怪的安装位置)
  • 所有编译器都有一种从命令行配置所有内容的方法。另一个答案说的是有道理的。我从来没有使用过 clang,所以我不能告诉你具体是怎么做的,但是所有的编译器或多或少都是一样的。你只需要查阅那里的文档来弄清楚每个人想要什么。

标签: c clang stdio


【解决方案1】:

是的,我有一个想法。删除 -cc1&lt;stdio.h&gt;。根据the clang FAQ,这是您的错误。它非常明确地指出,并给出了您的确切示例:

$ clang -cc1 hello.c
hello.c:1:10: fatal error: 'stdio.h' file not found
#include <stdio.h>
         ^
1 error generated.

继续阅读,它提供了其他替代解决方案以及有用的解释,您当然应该完整阅读,因为作为程序员,阅读我们使用的技术的手册是我们的工作。

clang -cc1 是前端,clang 是驱动程序。驱动程序使用适合您系统的选项调用前端。要查看这些选项,请运行:

$ clang -### -c hello.c

一些clang 命令行选项是仅驱动程序选项,有些是仅前端选项。仅前端选项仅供 clang 开发人员使用。 用户不应该直接运行clang -cc1,因为-cc1选项不能保证是稳定的。

如果您想使用仅前端选项(“-cc1 选项”),例如 -ast-dump,则需要使用驱动程序生成的 clang -cc1 行并添加您需要的选项。或者,您可以运行clang -Xclang &lt;option&gt; ... 强制驱动程序将&lt;option&gt; 传递给clang -cc1

重点是我的。这应该为您提供足够的指导来完成您需要完成的工作。

【讨论】:

  • 是的,我有。但这是运行自定义检查器的唯一方法。
  • 一点都不清楚。 “如果您想使用仅前端选项(“-cc1 选项”),例如 -ast-dump,那么您需要使用驱动程序生成的 clang -cc1 行并添加您需要的选项。” 什么-cc1 由驱动生成?
  • @UnguruBulan ...如果您以某种方式错过它第二次,在这里,我会为您重复一遍(复制/粘贴我的答案):“ clang -cc1 是前端,clang 是驱动程序。驱动程序使用适合您系统的选项调用前端。要查看这些选项,请运行:$ clang -### -c hello.c"
  • ... 如果您错过了我的问题,这里是您所缺少的部分,以“alternatively”开头,它告诉您第二个选项:“或者,您可以运行 clang -Xclang &lt;option&gt; ... 到强制驱动程序将&lt;option&gt; 传递给clang -cc1。"
  • 以下是:-triple" "i686-pc-windows-msvc19.12.25831" "-emit-obj" "-mrelax-all" "-mincremental-linker-compatible" "-disable-免费”“-main-file-name”“open.c”“-mrelocation-model”“静态”“-mthread-model”“posix”“-mdisable-fp-elim”“-fmath-errno”“-masm -verbose" "-mconstructor-aliases" "-target-cpu" "pentium4"...等。我已经指定了从哪里获取带有 -isystem "path_to_lib" 的库。命令类似于 clang -cc1 -isystem"路径" --analyze....
猜你喜欢
  • 2016-03-20
  • 2012-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多