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

bttbmeg0  于 2023-10-19  发布在  Windows
关注(0)|答案(4)|浏览(149)

更新:

我已经写了一个详细的教程,其中包含了这个问题的两个最重要的答案: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 includes来告诉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)和mingw-w 64(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的this version并将其放置在that directory
1.下载并安装cygwin的this version(或mingw 32或mingw-w 64),然后安装these packages
1.等等.

2nc8po8w

2nc8po8w1#

尝试安装MSYS2,然后安装mingw-w 64-x86_64-clang(二进制)软件包:

pacman -S mingw-w64-x86_64-clang

它现在有点旧(3.6.2),但对你来说可能已经足够好了。然后,当您运行MSYS 2提供的Win 64 shell时,clang将出现在您的路径上。
如果还不够好的话,我最近用MSYS 2构建了一个64位版本的clang,并使用它来编译原生的64位Windows可执行文件。我的过程是这样的:
1.使用pacman安装base-devel、mingw-w 64-x86_64-ninja、mingw-x86_64-cmake以及其他一些构建过程所需的软件包。
1.抓住my PKGBUILD script for clang and the files in the same directory。这是基于MSYS 2的mingw-w64-clang-svn包,这主要是Martell马龙的工作。你可以在MSYS 2 IRC频道上找到他,并向他询问更多有关它的信息。
1.在Win 64的shell中,转到PKGDUILD所在的目录,运行export MINGW_INSTALLS=mingw64(因此您只编译64位版本),然后运行makepkg-mingw
您不太可能在第一次尝试时就将所有内容都正确,并且可能需要编辑某些文件。Clang可能已经改变了,因为我最后一次这样做,有些补丁可能不适用干净。

i2loujxw

i2loujxw2#

如果您使用即将到来的clang 3.7.0,只需将PATH设置为包括mingw-w 64的bin,clang将按照您的预期工作

ds97pgxw

ds97pgxw3#

您可以在此处安装用于Windows的llvm预发布二进制文件。MinGW-w 64可以下载here。当然,您应该确保正确设置路径。
对于clang的最新版本,例如clang 6.0.0。@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
r7s23pms

r7s23pms4#

根据用户的需求,现有的答案要么过时,要么不完整,要么不够全面,问题中链接的博客文章是死链接。
最初的问题是:
我只是希望能够正确地设置clang/gcc/whatever,这样我就可以使用一个单一的、快速的、脏的控制台命令,就像上面的命令一样。
有一个“官方”的方法来做到这一点。诚然,它不像sudo apt install -y clang && clang hello.cpp那么简单,但与Cygwin/MSYS 2/MinGW相比仍然相对简单:
1.下载并安装Microsoft Build Tools for Visual Studio 2022。
1.在出现的安装程序中,选择“Desktop Development with C++”工作负载,并在右侧的“Installation details”下,选择“C++ Clang tools for Windows”:x1c 0d1x
1.继续安装;可能需要重新启动。
1.从开始菜单中,打开“Developer PowerShell for VS 2022”。这将为您设置环境变量,快捷方式的名称可能会有所不同。
1.导航到您的C/C++源代码所在的位置。在PowerShell中,cd按预期工作;对于更惯用的命令,请使用slSet-Location的别名)。

  • 运行clang.exe,使用所有选项编译文件,就像在Linux上一样。请注意,clang的安装将使用MSVC C和C++静态/动态库(ucrt.dll)。
  • 额外的好处:clang-cl.exe是一个clang驱动程序,它与微软自己的编译器cl.exe(包含在上面的设置中)的大多数选项兼容。从这个演示中,clang-cl.execlang.exe --driver-mode=cl。因此,cl.exe用户可以直接迁移到clang,而clang-cl.exe /std:c++20 /EHsc /O2 /Fe:main.exe main.cpp这样的东西可以完美地工作。

相关问题