首页 > 系统相关 >在Windows下配置Clang编译器

在Windows下配置Clang编译器

时间:2023-10-12 10:01:54浏览次数:48  
标签:LLVM x86 Windows clang 编译器 64 Clang include

Preferences

这篇文章主要介绍如何在Windows使用Clang编译器来编译C/C++程序(在命令行下,clang是C编译器,编译C++需要使用clang++)。

简介

基于LLVM强大的模块性和优化能力,作为C/C++编译器的Clang后发优势惊人。

Windows 安装 Clang 预编译好的二进制包

LLVM Download Page 页面可以下载预编译好的 Clang Windows 包(目前最新的包是17.01)。这个包里面内容还挺全的,包含Clang ToolsExtra Clang Tools

手动编译

如果你不想使用预先编译好的包,比如你想对编译选项做一些调整,可以手动编译Clang。可以参考下面文档:

有几个关键步骤在这里阐述一下:

  • LLVM Download Page

    下载源代码:

    • cfe-7.0.1.src.tar.xz
    • clang-tools-extra-7.0.1.src.tar.xz
    • llvm-7.0.1.src.tar.xz
  • 把上面的源代码解压后放在正确的目录下:

    • llvm-7.0.1.src.tar.xz 解压并重命名成llvm
    • cfe-7.0.1.src.tar.xz解压llvm/tools目录下,并重命名成clang
    • clang-tools-extra-7.0.1.src.tar.xz解压到llvm/tools/clang/tools目录下,并重命名成extra
  • 安装Visual Studio 2017 (Community版即可)

  • 安装CMake和GnuWin32Utils

  • 在llvm目录下创建一个build目录,并进入

  • 打开命令行提示符(确保CMake和GnuWin32Utils都在PATH中),执行cmake -G "Visual Studio 15 2017" -A x64 -Thost=x64 ..

  • 用Visual Studio打开LLVM.sln,设置目标项目为ALL_BUILD,配置类型为Release,然后开始构建。睡个午觉之后,差不多就编译好了,生成的文件在build/Release目录下

C++标准库

Clang的C++标准库[libc++](https://libcxx.llvm.org/)看起来不支持Winodws,所以用clang++编译下面这个C++程序的时候:

#include <iostream>
using namespace std;

int main() {
    cout << "Hello!" << endl;
    return 0;
}

会显示错误:

clang++.exe: warning: unable to find a Visual Studio installation; try running C
lang from a developer command prompt [-Wmsvc-not-found]
a.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>
         ^~~~~~~~~~
1 error generated.

解决这个问题有两个办法,一个是使用Visual Studio提供的C++库,另一个是使用MinGW提供的GCC的C++标准库(libstdc++)。

使用Visual Studio的C++库

这是Clang的默认选项。

执行clang -v可以看到:

clang version 17.0.1
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: D:\Soft\Language\LLVM\bin

默认的Target是x86_64-pc-windows-msvc,也就是使用isual Studio的C++标准库。

如果你安装了全套的Visual Studio (建议 VS2017之后的版本),那么从开始菜单的Visual Studio目录下打开Visual Studio的命令行,在这个命令行里面使用clang编译C++,clang会自己找到相应的C++库。

如果你没有安装全套的Visual Studio也不要紧,其实所需要的只是Visual Studio Build Tools,可以在VisualStudio Download下面。 关于如何使用Build Tools,可以参照这篇文章 How to compile C++ code with VS Code and Clang or Windows Tools | How To Install VS Microsoft C++ Build Tools on Windows

使用Visual Studio或者其相关的工具需要受到微软的License约束,目前Visual Studio的Community版本可以用于个人或者非商业项目。如果公司项目中使用Visual Studio Community版则有点违反授权的意味。

Update:

根据https://devblogs.microsoft.com/cppblog/updates-to-visual-studio-build-tools-license-for-c-and-cpp-open-source-projects/,https://visualstudio.microsoft.com/visual-cpp-build-tools/的授权限制放宽了。

使用MinGW提供libstdc++

是的,Clang可以从GCC那借用C++标准库,也就是libstdc++。在Windows上MinGW项目提供了一个Windows版的GCC,包含libstd++可供Clang使用。

MinGW的下载页面可以看到很多下载选项,适合Windows的有Cygwin、MingW-W64-builds和Msys2。

没什么别的需求的话,可以选用MingW-W64-builds

Update:

可以从下面地址获取较新的基于MinGW的GCC:

MingW-W64-builds提供一个安装器,来帮你选择合适的编译版本。最主要的是要选好i686版本,还是x86_64版本。本文以x86_64为例。

要让Clang使用MinGW,需要为clang指定命令行选项-target x86_64-pc-windows-gnu,但是我们执行clang++ -target x86_64-pc-windows-gnu a.cpp发现a.cpp:1:10: fatal error: 'iostream' file not found的错误依然存在。

这主要是因为MinGW默认安装在C:\Program Files\mingw-w64下面,Clang找不到MinGW。使用额外的-v选项,我们可以发现:

clang -cc1 version 7.0.1 based upon LLVM 7.0.1 default target x86_64-pc-win32
ignoring nonexistent directory "C:\Program Files\LLVM\x86_64-w64-mingw32\include\c++"
ignoring nonexistent directory "C:\Program Files\LLVM\x86_64-w64-mingw32\include\c++\x86_64-w64-mingw32"
ignoring nonexistent directory "C:\Program Files\LLVM\x86_64-w64-mingw32\include\c++\backward"
ignoring nonexistent directory "C:\Program Files\LLVM\x86_64-w64-mingw32\include\c++\"
ignoring nonexistent directory "C:\Program Files\LLVM\x86_64-w64-mingw32\include\c++\\x86_64-w64-mingw32"
ignoring nonexistent directory "C:\Program Files\LLVM\x86_64-w64-mingw32\include\c++\\backward"
ignoring nonexistent directory "C:\Program Files\LLVM\include\c++\"
ignoring nonexistent directory "C:\Program Files\LLVM\include\c++\\x86_64-w64-mingw32"
ignoring nonexistent directory "C:\Program Files\LLVM\include\c++\\backward"
ignoring nonexistent directory "include\c++"
ignoring nonexistent directory "include\c++\x86_64-w64-mingw32"
ignoring nonexistent directory "include\c++\backward"
ignoring nonexistent directory "C:\Program Files\LLVM\x86_64-w64-mingw32/sys-root/mingw/include"
ignoring nonexistent directory "C:\Program Files\LLVM\x86_64-w64-mingw32\include
"
#include "..." search starts here:
#include <...> search starts here:
 C:\Program Files\LLVM\lib\clang\7.0.1\include
 C:\Program Files\LLVM\include
End of search list.
a.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>
         ^~~~~~~~~~
1 error generated.

Clang默认在自己的安装目录C:\Program Files\LLVM下查找MinGW。要解决这个问题,一个办法是把MinGW安装或者链接到Clang需要的目录。

此外还有一个办法,就是把MingGW的g++命令添加到PATH环境变量中去。以我的MinGW安装为例,在命令行中执行

set path=C:\Program Files\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin;%path%

然后Clang就可以通过g++顺藤摸瓜,找到相应的头文件和库。

其他

标签:LLVM,x86,Windows,clang,编译器,64,Clang,include
From: https://www.cnblogs.com/RioTian/p/17758813.html

相关文章

  • dhcp服务器迁移---从windows server 2003到windows server 2012
    近期,工作中接触到dhcp服务器的迁移。搜索了网上的一些解决方案,很详细。以下主要是碰到的一些问题以及解决方案。由于2003的版本太老,导出来的配置文件为古老的mdb格式,而导入到2012中的格式需要为txt。 在2003中,尝试用命令(网上可找到)导出来txt格式,但是公司那台服务器实现不了......
  • Discuz! X3.5 从windows到windows的迁移
    适用场景Discuz!X3.5windows到windows的迁移,本例2016至2019准备安装IIS,安装应用程序开发,安装cgiisapi扩展isapi筛选器把之前的PHP文件夹拷到同目录下,避免版本问题和重新配置IIS,服务器节点,处理程序映射,添加模块映射 *.php FastCgiModule C:\PHP\php-cgi.exe未完待......
  • windows怎么查看端口占用情况
    Windows是广泛使用的操作系统之一,许多应用程序和服务都可能占用计算机上的端口。当端口被占用时,可能会导致其他程序无法正常工作或导致网络连接问题。因此,了解如何查看Windows上的端口占用情况非常重要。本文将介绍几种常用的方法,以帮助您查看和管理端口占用情况。Error:list......
  • PE盘安装Windows Server 2022系统
    前言我需要一台稳定且能够全天候运行的机器时,电脑原本预装的Windows10系统,虽然在日常使用场景下表现良好,但大家都知道Windows系统的自动更新太频繁了,而且无法关闭。为了解决这个问题,我决定重新安装WindowsServer系统。这里我选择了WindowsServer2022版本。WindowsSer......
  • windows 安装pyspark环境及pycharm配置
    1.安装JDKhttps://www.cnblogs.com/whiteY/p/13332708.html2.安装hadoop2.7下载hadoop2.7.1安装包链接:https://pan.baidu.com/s/1saGhaKbcvwrE4P3F5_UhZQ提取码:1234解压到指定位置3.下载winutils链接:https://pan.baidu.com/s/1L1iRZQcmaw9voQEJzO4bmA提取码:1234......
  • 安装windows11时卡在网络连接界面无法继续进行系统配置的处理方法
    1、问题描述:windows11安装后第一次开机,系统在联网界面出现如下图情况,无法继续下一步。 2.解决方法1、断电重启电脑2、按shift+F10弹出管理员命令行窗口3、输入oobe\bypassnro回车,电脑重启4、在到联网界面时,点击“我没有Internet连接选项”就可以继续进行系统设置5、进......
  • Windows打开:控制面板\网络和 Internet\网络连接 显示空白怎么办?
    Windows打开:控制面板\网络和Internet\网络连接  显示空白怎么办?最近有用户反馈遇到这个问题,问题产生原因:在卸载某个软件的时候,系统提示需要重新启动计算机,但是,启动之后,就出现了电脑不能联网,而且在控制面板\网络和Internet\网络连接中,显示为空白,正常情况下,这里面应该是有东西的......
  • linux服务器中文文件名打包之后到windows上解压乱码
    0:背景,服务器文件名是gbk编码,使用tarczf 打包,然后在windows上解包其中的中文文件名乱码。1:最终方式 #zip-r20231010.zip20231010 在服务器上压缩整个目录(里面有中文文件名)在windows上使用360压缩进行解压。就可以解决乱码问题。2:踩过的坑2.1 不能使用tarczf 创建*t......
  • Qt_C++读写NFC标签Ntag支持windows国产linux操作系统
    本示例使用的发卡器:ntag2标签存储结构说明#include"mainwindow.h"#include"./ui_mainwindow.h"#include<QDebug>#include"QLibrary"#include"QMessageBox"//本示例可在windows、linux系统内编译、运行//判断windows、linux系统,声明动态库函数---------------......
  • Windows更换默认远程端口3389
    直接上方法:1、打开注册表2、打开路径“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\Wds\rdpwd\Tds\tcp”,修改“PortNumber”4、打开路径“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp”,修改“Port......