clang没有编译c程序?

时间:2013-11-14 04:10:36

标签: c clang header-files llvm-clang

在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.

现在我尝试搜索新文件“”并在不同的文件夹中找到多个具有相同名称的文件,这让我感到困惑,这是我需要在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 个答案:

答案 0 :(得分:6)

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

我删除了clang:

sudo apt-get remove clang

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

sudo apt-get install clang-3.3

现在clang对我来说很好。

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

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

看看你是否可以找到Clang的config.h。它看起来是由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。

答案 3 :(得分:0)

根据这个: 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,换句话说,包含includes的clang目录必须位于bin目录下。 现在版本3.7已经改变了。现在,来自clang可执行文件的包含路径是../ lib / clang ...

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

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