为什么官方的clang for windows依赖MinGW才能创建使用标准C库的程序?

如题,我注意到Clang的Manual上有一句:
Clang has experimental support for targeting “Cygming” (Cygwin / MinGW) platforms.

确实,从官网上下载的pre-built的Windows Clang也需要MinGW才能编译依赖stdio.h的程序,否则会提示头文件不存在。

但是我也注意到有人说通过MSVC编译的Clang可以直接生成使用标准C库的程序,不需要安装MinGW,但需要安装Visual Studio.

这些现象背后的原理是什么?Clang在其中充当一个什么样的作用?为什么会出现这种现象?

新手,问题可能显得幼稚,见谅,谢谢。(已STFW)

阅读 12k
2 个回答

因为在这个目录C:\Program Files\LLVM\lib\clang\5.0.0\include下,
标准C头文件一个都没有,所以对应的lib文件也就没有了,以及对应的DLL也没有。

这个Pre-Built版本,只有编译器在里面,不带有任何STD的东东。

使用VS调用Clang的编译
使用的是VC目录提供的标准CHLIB,最终指向msvcrXX.dll (XX 代表你当前的VS版本)、ucrtbase.dll,如果是VS 2015或以上,那还会带一堆api-ms-win-coreapi-ms-win-crt

使用MinGW调用CLang编译
(也就是将环境变量INCLUDE目录指向到MinGWinclude目录),
使用的是MinGW提供的标准CHLIB,最终指向的是libstdc++-6.dll

只要调用标准C,不静态编译,那附送一个DLL是必须的。
而静态编译就附送一个大礼包EXE

猜测是clang还不够强大,没有自己的在win下的std标准库。
我也纳闷为什么安装了clang后不能像gcc那样直接g++程序。后来看报错是找不到头文件,那就是没有了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进