6

在 c 中编程时,我大部分时间都使用 clang 进行编译。突然它停止工作了。每当我尝试编译某些东西时,它都会给我这个输出假设文件名是 test.c

clang test.c 

In file included from test.c:1:
/usr/include/stdio.h:33:11: fatal error: 'stddef.h' file not found
# include <stddef.h>
          ^
1 error generated.

test.c 的来源是:

#include <stdio.h>
#include <stdlib.h>

int main( int argc, char *argv[] )
{
  printf("\nthis is a sample c program\n");
  return EXIT_SUCCESS;
}

注意:在 gcc 等其他编译器上它仍然有效。我应该怎么做才能让 clang 恢复工作?

如果您需要有关系统的任何信息:我使用的是 Ubuntu 13.10 32 位。文本编辑器:Emacs。

我也尝试卸载clang然后重新安装仍然得到相同的错误。


我在“usr/include/linux”中找到了该文件,然后将其粘贴到“usr/include”中,它现在没有向我显示同一文件的错误,但要求另一个文件

In file included from test.c:1:
In file included from /usr/include/stdio.h:74:
/usr/include/libio.h:50:10: fatal error: 'stdarg.h' file not found
#include <stdarg.h>
     ^
1 error generated.

现在我尝试搜索新文件“”,并在不同的文件夹中找到了超过 1 个同名的文件,这让我感到困惑,这是我需要在 clang 想要的目录中复制粘贴的正确文件。

有没有其他方法可以解决头文件的问题?


现在我找到了 clang 的 config.h 文件。文件中负责包含文件的两个变量及其当前值如下:

/* Relative directory for resource files */
#define CLANG_RESOURCE_DIR ""

/* Directories clang will search for headers */
#define C_INCLUDE_DIRS "/usr/include/i386-linux-gnu:/usr/include/i686-linux-gnu:/usr/include"

但我不知道我应该替换什么值才能让它工作。这些是我可以完全重新配置clang的任何方式吗?

4

4 回答 4

7

花了一些时间后,我发现由于“/usr/include/”目录中缺少头文件,clang 无法正常工作。许多其他 Linux 用户也面临同样的问题。就我而言,这是由于更新到 Ubuntu 的新版本而发生的。

我通过以下方式删除了叮当声:

sudo apt-get remove clang

然后安装了clang-3.3,这是不同版本的clang

sudo apt-get install clang-3.3

现在clang对我来说工作得很好。

于 2013-11-15T00:47:18.640 回答
3

这是 Ubuntu 中的一个已知错误。你可以在 Ubuntu 和 Debian bugtrackers 上跟踪它:

似乎临时解决方法是安装该clang-3.3软件包。

于 2013-11-14T04:48:24.897 回答
1

从这里:http ://clang.llvm.org/doxygen/config_8h_source.html

看看你能不能找到config.hClang。它看起来是由configure进程生成的。

那里列出了两个可能导致此问题的变量。

00010 /* Relative directory for resource files */
00011 #define CLANG_RESOURCE_DIR ""
00012 
00013 /* Directories clang will search for headers */
00014 #define C_INCLUDE_DIRS ""

您可能需要更改这些变量以反映正确的位置,或者重新配置 clang。

于 2013-11-14T04:49:03.463 回答
1

据此: http ://clang.llvm.org/docs/LibTooling.html#libtooling-builtin-includes

CLang 将其作为内置包含提供。它说它是由 CLang 提供的,并且必须在路径 $(dirname /path/to/tool)/../lib/clang/3.3/include 中,但我发现这仅在 Linux 中是正确的。在 Windows 中,路径是 $(dirname /path/to/tool)/../bin/clang/3.3/include,或者换句话说,包含 include 的 clang 目录必须在 bin 目录下。这在 3.7 版中已更改。现在来自 clang 可执行文件的包含的路径是 ../lib/clang...

我很确定整个 clang/lib/clang 目录必须在 CLang 正在寻找它的位置。

您可以使用 -v 开关查看 clang 的位置。

于 2014-01-24T04:35:49.870 回答