在Windows上使用Clang构建64位C++14,需要安装什么?

53

更新:

我写了一篇详细的教程,结合了这个问题中排名前两位的答案:http://blog.johannesmp.com/2015/09/01/installing-clang-on-windows-pt1/



简而言之

在Windows上,给定以下程序:

#include <iostream>

int main()
{
    int arr[] = {1, 2, 3, 4, 5};
    for(auto el : arr)
    {
        std::cout << el << std::endl;
    }
    return 0;
}

我希望能够做到以下事情:

clang++ hello.cpp -o hello.exe -std=c++14

获得一个64位的可执行文件,即可运行。我不想添加大量的-I包含目录来告诉clang在哪里找到iostream或其他标准的C++头文件; 我也不想进行多次链接。

我并不太关心性能、效率、使用哪个链接器等等。我只想让clang/gcc/任何东西正确设置,以便我可以使用一个简单、快速且不太规范的控制台命令,就像上面的例子一样。

我需要安装什么才能使这个即可运行?


问题

作为主要使用Mac/Linux的用户,我习惯于使用包管理器安装最新版本的clang,这样就可以即可运行

现在我正在尝试在Windows上设置clang/gnu编译器,但似乎要困难得多,可能是因为没有直截了当的文档(至少我没能找到)。

我尝试遵循这个教程:https://yongweiwu.wordpress.com/2014/12/24/installing-clang-3-5-for-windows - 并且能够使用它来构建和链接clang(使用gcc 4.8.2),但生成的二进制文件是32位的。

我尝试安装最新的预编译二进制版本的clang (3.6.2) 和64位的mingw-w64 (4.9.3 for 64 bit with posix and sjlj for exceptions),但出现以下问题:

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

这似乎表明clang没有看到gcc的文件。 LLVM / clang的某些版本似乎只寻找特定版本的gcc,但似乎没有在任何地方记录?

类似地,LLVM IRC上有人告诉我,您需要修改clang的驱动程序以查找特定路径中的gcc?


我正在寻找的内容

如果必要,我可以从源代码构建LLVM / Clang,但我真正想要的是清晰的,逐步说明,使我能够像在mac / linux上一样轻松使用clang ++ 的说明。

类似于:

  1. 构建此版本的LLVM / Clang,并将其放置在该目录
  2. 下载并安装cygwin(或mingw32或mingw-w64)的这个版本,然后安装这些软件包
  3. 等等...

请参见 https://github.com/boostorg/hana/wiki/Setting-up-Clang-on-Windows。 - Vadzim
4个回答

17

尝试安装MSYS2,然后安装 mingw-w64-x86_64-clang(二进制)包:

pacman -S mingw-w64-x86_64-clang

目前(3.6.2版本)有点旧,但可能对您来说已经足够好了。然后当您运行由MSYS2提供的Win64 shell时,clang将出现在您的路径中。

如果不够用,最近我一直在使用MSYS2构建了一个64位版本的Clang,并用它来编译本机64位Windows可执行文件。我的过程大致如下:

  1. 使用pacman安装base-devel、mingw-w64-x86_64-ninja、mingw-x86_64-cmake和其他一些构建过程所需的包。
  2. 获取我的Clang PKGBUILD脚本以及同一目录下的文件。这是基于来自MSYS2的mingw-w64-clang-svn程序包的工作,该工作主要是Martell Malone完成的。您可以在MSYS2 IRC频道上找到他并向他询问更多信息。
  3. 在Win64 shell中,进入我的PKGDUILD所在的目录,运行export MINGW_INSTALLS=mingw64(这样您只编译64位版本),然后运行makepkg-mingw

第一次尝试可能不会完全正确,有些文件可能需要编辑。Clang自上次我进行此操作以来可能已经更改,某些补丁可能无法顺利应用。


2
MSYS2 是一种用于在 Windows 上进行软件开发的环境,并且它拥有一个包管理器 (pacman)。它非常棒! - David Grayson
1
你的软件包数据库可能已经过时了;MSYS2现在使用gcc 5.2.0。请仔细按照https://sourceforge.net/p/msys2/wiki/MSYS2%20installation/中的“更新软件包”说明进行操作。 - David Grayson
经过一些搜索,这个问题在这里得到了回答:https://dev59.com/FmYr5IYBdhLWcg3wVYsg#14033674。可以提供`-static`标志,编译器将尝试在可能的情况下包含库。我理解这会增加可执行文件的大小和可能的内存使用,但这是可以接受的。 - Johannes
1
将所需的运行时 DLL 复制到与您的可执行文件相同的目录中是让它运行的另一种方法。 - David Grayson
是的!还应该注意(即使只是为了日后阅读本文的人参考),库的动态链接不仅限于MSYS2的可执行文件,也影响到使用clang 3.7.0构建的可执行文件(如上所述,我最可能会选择它,因为它也可以与32位一起使用)。无论如何,非常感谢你的帮助David。我选择另一个答案是因为它更简单,但我肯定也会在未来使用msys2。 - Johannes
显示剩余9条评论

11
如果您使用即将发布的Clang 3.7.0版本,只需将PATH设置为包含mingw-w64的bin目录,Clang将按照您的期望工作。

谢谢!我从这里的预发布页面http://llvm.org/pre-releases/3.7.0/下载了clang 3.7.0,并安装了mingw-w64的4.9.3版本:http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/4.9.3/threads-posix/sjlj/x86_64-4.9.3-release-posix-sjlj-rt_v4-rev0.7z/download,确保两者都在路径上有它们的bin目录,然后它就可以工作了!http://i.imgur.com/E1XKaeY.png - Johannes
我最终安装了clang 3.7.0的64位和32位版本以及mingw-w64(版本为5.1.0,64位使用posix线程带有seh异常,32位使用dwarf异常)。我将它们放在默认位置,并只将64位版本加入路径。然后我制作了两个批处理文件,以便在需要时临时添加32位版本到路径: https://gist.github.com/JohannesMP/1e7ed200367460255971 -例如在使用仅支持32位可执行文件的drmemory时。这非常好用,我可以使用clang/gcc在32位和64位下进行编译和链接。 - Johannes

3
您可以在此处安装 Windows 版的 LLVM 预发布二进制文件:这里。MinGW-w64 可以在此处下载:这里。当然,您需要确保路径已正确设置。
对于最新版本的 clang,例如clang 6.0.0。上面的解决方案(by @user5271266)将不再足够。现在,clang 在 Windows 上的默认目标是x86_64-pc-windows-msvc(假设您正在使用64位的Windows)。
为了编译C++源代码,根据这里的建议,我们应该更改目标。
clang++ -target x86_64-pc-windows-gnu -std=c++14 test.cc -o test.exe

除了在系统路径中安装Clang之外,CMake识别Clang所需的系统变量是什么? - Royi
我没有使用CMake的经验。所以恐怕你需要提出一个新问题或搜索现有的问题。 - jdhao
CMake只是查找默认的系统变量安装CLang添加到Windows系统中。它们是什么? - Royi
我只是手动将LLVM可执行文件路径添加到我的系统“PATH”变量中,类似于“d:\Program Files\LLVM\bin”。 - jdhao

0
根据用户的需求,现有的答案要么过时、不完整,要么不够全面,问题中链接的博客文章已经失效。
最初的问题是:
引用: 我只想能够正确地设置clang/gcc/等等,以便我可以使用一个简单的、快速而且不拘一格的控制台命令,就像上面的例子一样。 官方的方法是存在的。虽然不能像sudo apt-get install -y clang && clang hello.cpp那样简单,但与Cygwin/MSYS2/MinGW相比仍然相对简单:
  1. 下载并安装Microsoft的Visual Studio 2022构建工具
  2. 在出现的安装程序中,选择“使用C++进行桌面开发”工作负载,并在右侧的“安装详细信息”下选择“Windows的C++ Clang工具”:VS Installer: Clang config
  3. 继续安装;可能需要重新启动计算机。
  4. 从开始菜单中打开“VS 2022开发人员PowerShell”。这将为您设置环境变量,快捷方式的名称可能不同。
  5. 导航到您的C/C++源代码所在的位置。在PowerShell中,cd命令按预期工作;如果要使用更习惯用法的命令,可以使用slSet-Location的别名)。
  6. 使用clang.exe编译您的文件,包括所有选项,就像在Linux上一样。请注意,此安装的clang将使用MSVC C和C++静态/动态库(ucrt.dll)。
    • 额外奖励:clang-cl.exe是一个与Microsoft自己的编译器cl.exe(包含在上述设置中)的大多数选项兼容clang驱动程序。根据此演示文稿clang-cl.execlang.exe --driver-mode=cl。因此,cl.exe用户可以直接迁移到clang而几乎没有麻烦,类似于clang-cl.exe /std:c++20 /EHsc /O2 /Fe:main.exe main.cpp的命令完美运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接