【问题标题】:What do you need to install to use Clang on windows to build c++14 for 64 bit?您需要安装什么才能在 Windows 上使用 Clang 为 64 位构建 c++14?
【发布时间】:2015-11-21 05:32:10
【问题描述】:

更新:

我已经写了一个详细的教程,其中包含了这个问题的前两个答案:http://blog.johannesmp.com/2015/09/01/installing-clang-on-windows-pt1/



TL;DR

在 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/whatever 以便我可以使用单个、快速和肮脏的,类似上面的控制台命令。

我需要安装什么才能正常工作


问题

作为一个主要是 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,但我真的只是在寻找清晰的分步说明,让我能够尽可能轻松地使用 clang++用mac/linux

类似:

  1. 构建 LLVM/Clang 的 this version 并将其放入 that directory
  2. 下载并安装this version的cygwin(或mingw32或mingw-w64)并安装these packages
  3. 等等..

【问题讨论】:

标签: windows c++11 gcc clang++ llvm-clang


【解决方案1】:

尝试安装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. 获取my PKGBUILD script for clang and the files in the same directory。这是基于来自 MSYS2 的 mingw-w64-clang-svn 包,这主要是 Martell Malone 的工作。您可以在 MSYS2 IRC 频道上找到他,并向他询问更多相关信息。
  3. 在 Win64、shell 中,进入包含我的 PKGDUILD 的目录,运行 export MINGW_INSTALLS=mingw64(因此您只编译 64 位版本),然后运行 ​​makepkg-mingw

您不太可能在第一次尝试时就搞定一切,有些文件可能需要编辑。自从我上次执行此操作以来,Clang 可能已经发生了变化,并且某些补丁可能无法完全应用。

【讨论】:

  • 有趣。我会试一试。 MSYS2 是像 brew/apt-get 这样的包管理器吗?我以前没听说过。
  • MSYS2 是一个在 Windows 上进行软件开发的环境,它确实有一个包管理器 (pacman)。太棒了!
  • 好的,我已经尝试安装它并运行您提到的第一个命令。我收到一堆 404:i.imgur.com/DVKtj74.png 有什么想法吗?
  • 您的包裹数据库可能已经过时了; MSYS2 现在使用 gcc 5.2.0。请仔细按照sourceforge.net/p/msys2/wiki/MSYS2%20installation中的“更新包”说明进行操作
  • 将所需的运行时 DLL 复制到与可执行文件相同的目录是让它运行的另一种方法。
【解决方案2】:

如果你使用即将推出的 clang 3.7.0,只需设置 PATH 以包含 mingw-w64 的 bin,clang 将按预期工作

【讨论】:

  • 谢谢!我从这里的预发布页面下载了 clang 3.7.0:llvm.org/pre-releases/3.7.0 并安装了 mingw-w64 的 4.9.3 版本:sourceforge.net/projects/mingw-w64/files/…,确保它们的 bin 目录在路径上并且它工作! i.imgur.com/E1XKaeY.png
  • 我最终安装了 64 位和 32 位版本的 clang 3.7.0 和 mingw-w64(版本 5.1.0,64 位具有 seh 异常和 32 位具有 dwarf 异常的 posix 线程)。我将它们放在默认位置,并且只将 64 位版本放在路径上。然后我制作了两个批处理文件,以便在需要时将 32 位版本临时添加到路径中:gist.github.com/JohannesMP/1e7ed200367460255971 - 例如,当使用仅支持 32 位可执行文件的 drmemory 时。这很好用,我可以编译和链接 32 位和 64 位的 clang/gcc。
【解决方案3】:

您可以为 Windows here 安装 llvm 预发行二进制文件。 MinGW-w64 可以下载here。当然,您应该确保路径设置正确。

对于最新版本的 clang,例如,clang 6.0.0。 @user5271266 的上述解决方案还不够。现在 clang Windows 的默认目标是x86_64-pc-windows-msvc(假设您使用的是 64 位 Windows)。

为了编译C++源文件,根据here,我们应该改变目标:

clang++ -target x86_64-pc-windows-gnu -std=c++14 test.cc -o test.exe

【讨论】:

  • 除了系统路径上有CLang之外,CMake识别Clang还需要哪些系统变量?
  • 我没有使用 CMake 的经验。所以恐怕你必须提出一个新问题或搜索一个现有问题。
  • CMake 只是查找 CLang 的默认系统变量安装添加到 Windows 系统。它们是什么?
  • 我只是手动将 LLVM 可执行路径添加到我的系统 PATH 变量中,类似于 d:\Program Files\LLVM\bin
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多