clang是一个独立的C编译器还是需要gcc?

时间:2015-09-08 00:11:26

标签: c windows clang

我想在Windows上使用clang来编译C代码。

我想知道它是否实际上是一个可以做到这一点的独立编译器,还是它的目标有些不同?

之前我曾经使用过它,但现在看起来它就是在gcc编译器所在的任何地方(例如mingw)。

如果我尝试使用clang 64位的全新二进制安装(我隐藏了我的mingw / gcc目录),那么它无法找到Hello World的stdio.h。这是直接在bin目录(C:\ clang \ bin)内运行的。如果我取消隐藏mingw,它将编译,但然后我得到这样的错误(一个mingw编译器在c:\ win):

c:\ win \ bin \ ld.exe找不到-lgcc_s

考虑到clang是一个438MB的安装,你会认为它有自己的包含和库文件!我想在gcc中使用clang

那么,我做错了什么? (我已经看到了一些关于无法找到stdio.h的问题,但它们没有用。当然clang必须能够自己编译Hello World吗?!)

3 个答案:

答案 0 :(得分:0)

Clang是一个完全独立的编译器(使用LLVM完全从头开始编写)。你不需要GCC来使用Clang,正如FreeBSD的情况所示(他们完全用Clang / LLVM取代了GCC,并且由于许可原因不再在基地安装GCC)。除了GCC之外,还有各种不同的C编译器,它只是GCC最常见的。

但是,没有编译器提供标准的C库(GCC提供了一些奇怪的库,比如你正在尝试使用的库)。 C库是单独提供的,您需要安装C库才能编译任何重要的C程序。显示cannot find -lgcc_s的错误消息告诉我您正在尝试链接GCC提供的某些库。在这种情况下,您可能希望通过安装GCC来安装该库(但请注意,您不需要需要 GCC来使用Clang。

看来您的Clang版本已经编译为使用GNU链接的ld,而不是LLVM链接的lld。因此,您需要GCC的链接器(或者您可以重新编译clang以使用LLVM的链接器,或者只是编译目标文件并单独使用lld)。

答案 1 :(得分:0)

您将使用标准库的编译器与链接器混淆。

Clang是一个功能齐全的独立编译器。但它不提供标准库(包含stdio.h的库)。传统上,在Unix系统上,操作系统必须提供它使用的标准库。但是由于你使用的是Windows,它没有,并且无论出于什么原因它都会找到MingW安装的。 C标准库有许多免费实现,与Clang兼容。

最后,ld.exe是链接器,传统上它也必须由系统提供。我认为有一个链接器lld与Clang一起开发,但无论出于何种原因,您下载的版本的打包器只是选择配置clang来简单地调用ld

答案 2 :(得分:-2)

我认为您缺少路径变量。安装后,必须手动将PATH添加到Windows环境。