关于在windows上构建LLVM,网上有不少文章,但都是互相抄来的,写作时极不认真,不是少这个,就是少那个,没有一篇是可以完整照着做下来的,实在气人。

本文的安装和配置过程,我亲自操作过好几遍,不惜为此重装操作系统,相信大家只要按照步骤严格操作,一般不会出意外的。

整个过程预计耗时4~5小时,具体取决于网速和机器配置,请大家在操作之前做好心里准备。

我的操作系统是Win7x64,计划以x64为目标平台来构建。

准备清单:

1、Visual Studio 2017 Community

2、LLVM-7.0.1-win64 src

【LLVM】http://releases.llvm.org/7.0.1/llvm-7.0.1.src.tar.xz
    【CLang】http://releases.llvm.org/7.0.1/cfe-7.0.1.src.tar.xz
    【Compiler-rt】http://releases.llvm.org/7.0.1/compiler-rt-7.0.1.src.tar.xz

3、CMake-3.14.0 x64

4、python-3.7.1-amd64

5、strawberry-perl-5.28.1.1-64bit

6、GetGnuWin32-0.6.3

准备上述资源时,请务必保证版本号不低于上述所列要求,最好和我的保持一致。

安装步骤:

1、安装CMake,安装时注意勾选:把bin路径加入PATH

2、安装python,安装时注意勾选:把bin路径加入PATH

如果忘了加入PATH,后面CMake配置VS工程会失败。

3、安装strawberry-perl,这也是CMake依赖的,它在安装后会自动加入PATH。

4、安装GetGnuWin32,把bin路径加入PATH

进入bin目录,执行download.bat,下载所有组件,耗时很长,慢慢等待。

一定要等所有组件全部下载完,否则,后面CMake配置VS工程会失败。

5、安装VS2017,把C++桌面开发和通用桌面开发,都勾选上,里面有C++编译器和CMake相关工具。

6、解压缩源代码:

解压缩llvm-7.0.1.src.tar.xz,调整目录为 E:/llvm

解压缩cfe-7.0.1.src.tar.xz,调整目录为E:/llvm/tools/clang

解压缩compiler-rt-7.0.1.src.tar.xz,调整目录为E:/llvm/projects/clang

7、运行VS2017的x64 本机工具命令行程序,执行以下命令来生成VS解决方案:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community> e:
E:\> cd llvm
E:\llvm> mkdir build
E:\llvm\build> cd build
E:\llvm\build> cmake -G "Visual Studio 15 Win64" e:/llvm

注意,Visual Studio 15表示VS2017,Win64表示目标平台是x64。

如果是64位平台,请务必选Win64,否则编译出的程序无法运行!

顺便说一句,网上几乎所有文章都会告诉你用 -Thost=x64来设置目标x64平台,实际操作下来,根本无效!请严格按照我这里的操作。

CMake生成过程中,肯定会出现很多looking for xxx - not found的提示,没关系,不影响构建。

如果构建顺利,最后会显示如下结果:

-- Configuring done
-- Generating done
-- Build files have been written to: E:/llvm/build

8、打开VS2017,打开解决方案 E:/llvm/build/LLVM.sln,切换为Release模式。

找到CMakePredefinedTargets目录下的ALL_BUILD工程,开始构建,耗时非常非常长,耐心等待!

构建完成后,输出的bin和lib在以下位置:E:/llvm/build/Release

9、确认编译出的bin是x86还是x64的

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community> clang -v 

clang version 7.0.1(tags/RELEASE_701/final)

Target:x86_64-pc-windows-msvc

Thread model: posix

InstallerDir: E:\llvm\build\Release\bin

10、编译测试程序:

#include <stdio.h>

int main() {
printf("Hello world!");
return ;
}

运行VS2017的x64 本机工具命令行程序,通过以下命令进行编译:

C:\Program Files (x86)\Microsoft Visual Studio\\Community> D:
D:\> clang --target=x86_64-pc-windows-msvc hello.c -o hello.exe
D:\> hello.exe
Hello world!

如果包含中文,会有乱码问题。代码如下:

#include <stdio.h>

int main() {
printf("你好 world!");
return 0;
}

做了各种尝试,结论如下:

1、把文件保存为UTF-8格式是没有用的!

2、调用setlocale函数也是没有用的!

可行方案如下:

把文件保存为ASCII格式,编译时产生一个警告:

warning: illegal character encoding in string literal

[-Winvalid-source-encoding]

需要带上一个参数,忽略这个警告。如下:

C:\Program Files (x86)\Microsoft Visual Studio\\Community> D:
D:\> clang --target=x86_64-pc-windows-msvc -Wno-invalid-source-encoding hello.c -o hello.exe
D:\> hello.exe
你好 world!

最后再测试一下lli.exe

C:\Program Files (x86)\Microsoft Visual Studio\\Community> D:
D:\> clang -emit-llvm -c hello.c -o hello.bc -Wno-invalid-source-encoding
D:\> lli hello.bc
你好 world!

在windows上构建LLVM 7.0.1的更多相关文章

  1. 在Windows上安装Elasticsearch 5.0

    在windows上安装Elasticsearch Elasticsearch可以使用.zip软件包安装在Windows上. elasticsearch-service.bat命令,它将设置Elasti ...

  2. 迁移 Windows 上 Oracle 11.2.0.3.0 到 Linux 上 Oracle 11.2.0.3.0

    一.迁移前数据库基本信息统计 查看数据库版本 SELECT * FROM V$VERSION; /* Oracle Database 11g Enterprise Edition Release 11 ...

  3. IIS 在 Windows 上托管 .NET Core2.0

    使用 IIS 在 Windows 上托管 ASP.NET Core2.0 https://www.cnblogs.com/sundar/p/9195550.html 阅读目录 准备: 第一步:新建项目 ...

  4. 【ProtoBuffer】windows上安装ProtoBuffer3.1.0 (附已编译资源)

    ------- 17.9.17更新  --- 以下这些方法都是扯淡,对我的机器不适用,我后来花了最后成功安装并亲测可用的方法不是靠vs编过的,vs生成的库引入后函数全部报undefine refere ...

  5. Windows上编译LLVM 3.2

    LLVM还是做的很好的,可以很方便的编译. 解压LLVM 3.2到[工作目录]/llvm/llvm-3.2.src 解压Clang到[工作目录]/llvm/llvm-3.2.src/tools/cla ...

  6. Windows 上安装 MySQL(8.0.11)

    1.接下来我们需要配置下 MySQL 的配置文件 打开刚刚解压的文件夹 C:\web\mysql-8.0.11 ,在该文件夹下创建 my.ini 配置文件,编辑 my.ini 配置以下基本信息: [m ...

  7. Windows 8.0上Eclipse 4.4.0 配置CentOS 6.5 上的Hadoop2.2.0开发环境

    原文地址:http://www.linuxidc.com/Linux/2014-11/109200.htm 图文详解Windows 8.0上Eclipse 4.4.0 配置CentOS 6.5 上的H ...

  8. 在Windows 2008/2008 R2 上配置IIS 7.0/7.5 故障转移集群

    本文主要是从:http://support.microsoft.com/kb/970759/zh-cn,直接转载,稍作修改裁剪而来,其中红色粗体部分,是我特别要说明的 若要配置 IIS 7.0 和 7 ...

  9. Windows 10 下ASP.NET4.0尚未在Web服务器上注册

    系统换成Win10后,打开VS2012出现如下问题: 网上查找了,大部分都是 C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319 并管理员运行aspnet_ ...

随机推荐

  1. C# 验证XML

    一.验证XML文档 若要验证 XML 文档,需要构造一个 XmlReaderSettings 对象,其中包含用于验证 XML 文档的 XML 架构定义语言 (XSD) 架构.Schema是用于描述和规 ...

  2. python3中如何区分一个函数和方法

    一般情况下,单独写一个def func():表示一个函数,如果写在类里面是一个方法.但是不完全准确. class Foo(object): def fetch(self): pass print(Fo ...

  3. Druid的Segment Balance及其代价计算函数分析

    Balance $Cost(X, Y) $ $$ J_\alpha(x) = \sum_{m=0}^\infty \frac{(-1)^m}{m! \Gamma (m + \alpha + 1)} { ...

  4. openstack 部署(Q版)-----环境准备篇

    一.环境准备 系统:centos7 cinder01 内网:192.168.10.51 外网:172.16.1.51 compute01   内网:192.168.10.52 外网:172.16.1. ...

  5. 洛谷P2216 理想的正方形

    题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行为3个整数,分别表示a,b,n的值 第二行至 ...

  6. Springboot中静态资源和拦截器处理(踩了坑)

    背景: 在项目中我使用了自定义的Filter 这时候过滤了很多路径,当然对静态资源我是直接放过去的,但是,还是出现了静态资源没办法访问到springboot默认的文件夹中得文件 说下默认映射的文件夹有 ...

  7. YARN Architecture

    The fundamental idea of YARN is to split up the functionalities of resource management and job sched ...

  8. Building a Space Station---poj2031(最小生成树)

    题目链接:http://poj.org/problem?id=2031 n个球型的cell,如果任意两个球表面没有接触或者没有包含关系,就选择最近的表面建立通道: 所以用maps[i][j]表示i,j ...

  9. 对nodejs的理解(一)

    1.介绍一下事件驱动编程---快餐店点餐. 在基于线程的方式中(thread-based way)你到了柜台前,把你的点餐单给收银员或者给收银员直接点餐,然后等在那直到你要的食物准备好给你.收银员不能 ...

  10. python 面向对象 析构方法

    实例化但从来没有调用他,就浪费了,就应该自动删除它 这个实例一直存在内存里 python有个垃圾自动回收机制 , 每段时间会自动刷新整个内存,把内存垃圾东西删除   析构函数: 在实例释放.销毁的时候 ...