【问题标题】:A error when I use clang to compile c file?使用clang编译c文件时出错?
【发布时间】:2018-09-28 10:22:42
【问题描述】:

我用clang编译c文件时,出现错误。 c文件很简单。 main.c

#include <STDIO.H>

int main() {
    printf("Hello\n");
    return 0;
}

我在 windows 中使用了以下命令。

clang main.c

错误

C:\Users\bo\Desktop>clang main.c
In file included from main.c:1:
F:\Microsoft Visual Studio\VC98\Include\STDIO.H:70:22: error: typedef
  redefinition with different types ('unsigned int' vs 'unsigned long long')

typedef unsigned int size_t;
                 ^
1 error generated.

【问题讨论】:

  • 我不知道标准头 STDIO.H - 可能你想要 stdio.h ? Bzw:clang报告的错误信息会很棒...
  • 您正在使用 clang 编译器,它显然包含来自 VStudio 的文件。这似乎不对。也许在调用 clang 之前重置 %INCLUDE% 环境变量?或显式将路径传递给其包含文件。此外,您可能希望使用小写字母 (stdio.h),这在 Win 上不是问题,但仍然如此。此外,size_t 定义不匹配似乎与 32/64 位有关。
  • VC98 是 Visual Studio 版本 6,于 1998 年发布。当然,它的 .h 文件非常不适合与 clang 一起使用。 VS2017直接支持Clang,社区版免费下载。
  • F:\Microsoft Visual Studio\VC98\Include\STDIO.H 听起来像是一个非常陈旧过时的 stdio.h 文件。
  • 您系统上的 windows SDK 似乎对于 LLVM 版本来说太旧了。可能您正在使用 32 位 SDK 编译 64 位。尝试使用命令行clang -m32 main.c。无论如何更新你的系统下载最后一个win SDK。

标签: c clang clang++ stdio


【解决方案1】:

英语不是我的母语,也许我会遇到一些问题 表达方式,我尽量表达清楚来帮助你。

我看到你想在 Windows 上使用 clang 编译器,命令行中的警告说明你的 Visual Studio 库版本对于 LLVM 版本来说太旧了,我不认为 VisualC++6.0 是你正在使用的 IDE现在,也许您只是安装它并把它收起来。这个错误可能是VC6.0引起的。

所以我建议检查你的环境变量,可能有一个“包含”变量,文件目录是“F:\Microsoft Visual Studio\VC98\Include\”,就像那个警告一样。删除即可,如果有更多的变量包含VC6.0,如“Path”,如果你不需要,删除包含VC6.0的变量。

尽量用VS2019代替VC6.0,它可以为Clang提供最新的Windows SDK。

【讨论】:

  • 如果还是不行尝试卸载VC6.0,并删除我上面提到的所有环境变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
  • 2023-04-07
  • 1970-01-01
  • 2014-12-14
  • 1970-01-01
相关资源
最近更新 更多