【问题标题】:Why can't I compile this program with clang?为什么我不能用 clang 编译这个程序?
【发布时间】:2015-07-04 12:19:14
【问题描述】:

我已经从here 下载了 Windows 快照版本。我只是运行该可执行文件并编写以下简单的 C++ 程序

#include <iostream>
int main()
{
     std::cout<<"Welcome to Clang\n";
}

clang++ 999.cpp

999.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>
         ^
1 error generated.

这里出了什么问题?我错过了什么?我应该怎么做才能在 Windows 上使用 clang 成功编译我的 C 和 C++ 程序?

【问题讨论】:

  • 您使用的是什么操作系统?可能是一个糟糕的安装?系统某处有 iostream 文件吗?
  • @parapurarajkumar: windows 7.

标签: c++ windows compiler-errors clang++ llvm-clang


【解决方案1】:

clang 的 C++ 标准库不支持 windows 平台:http://libcxx.llvm.org/

这就是为什么您不能简单地在 Windows 中编译此代码的原因:它找不到您所指的标头。

编辑:

按照 Tom 的说法,您可以给 clang 一个构建目标:

clang -target i686-pc-windows-win32 ....

当给定一个 win32 目标时,如果安装了 msvc 的库,并且环境变量 INCLUDE 未设置为其他位置,clang 将使用它。

但请注意,llvm website 对此给出了免责声明:

Clang 主要在 Windows 上工作,但目前还不能全部理解 微软对 C 和 C++ 的扩展。正因为如此,铿锵 无法解析 Visual Studio 中包含的 C++ 标准库,也无法解析 Windows 平台 SDK 的一部分。然而,大多数标准 C 程序 编译。

【讨论】:

    【解决方案2】:

    您需要安装 Visual Studio。

    Clang 使用它的库和头文件。

    【讨论】:

    • 我想它可以。但我怀疑你必须做一些事情才能让它以这种方式工作:我安装了 msvc 并尝试了 clang,但得到与 op 类似的错误
    • @Christophe:不,那么您将链接哪些库...?您必须选择 Visual Studio 目标或 MinGW 目标。确保您的目标是 MSVC,使用“-v”检查。
    • @Tom:使用 -v 显示默认选项会查找 mingw 库。所以要让它运行还需要做更多的工作,而 llvm 不保证它实际上可以与 MSVC 的库一起工作。不过谢谢你的提示。
    • @Christophe:Clang 确实适用于 MSVC 库,很多人都在研究它,而似乎没有人真正关心 MinGW 目标了。我正在 GitHub 上观看 llvm-mirror/clang 和 llvm-mirror/llvm 存储库,据我所见,clang 投入了大量精力以使 clang 与 MSVC 库和标头正常工作,尤其是来自 Google。他们希望摆脱 MSVC,转而使用 Clang for Chrome。有关详细信息,请参阅clang.llvm.org/docs/MSVCCompatibility.html
    • @Christophe:我不知道确切的 MSVC 三元组,但您可能会遇到这样的事情:clang++ -target i686-pc-win32-msvc &lt;src.cpp&gt; [...]。也许您的 clang 是使用 MinGW 而不是 MSVC 构建的 - 这将导致它默认以 MinGW 而不是 MSVC 为目标。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    相关资源
    最近更新 更多