构建Clang(windows MinGW,clang3.2(G++))

原创
2012/12/21 02:34
阅读数 1.9W

作为一个开发人员,开发工具是很重要的帮手,这里,我要给大家介绍的是如何在Windows上构建你的Clang,并且配置好。
首先 你要获得Clang的源代码,如果你要从源码库获取源代码,建议安装 svn ,Tortoisesvn在Windows上是很好用的svn之一,而且你可以下载中文语言包。
你可以从http://llvm.org/svn/llvm-project/  克隆你需要的模块,cfe是clang的目录 trunk是主干,tags是分支,稳定版本都在tags中,如clang 3.2最终代码就是http://llvm.org/svn/llvm-project/cfe/tags/RELEASE_32/final/这个目录
你也可以从http://llvm.org/releases/3.2/下载源代码,已经打包了的。
当然你也可以直接下载已经编译好的包。

你需要得到的有 LLVM,Clang,Compiler-RT,各自解压,将Clang的源代码移动到LLVM\tools,将Compiler-RT的源代码移动到llvm\Projects,

建议你使用MinGW编译,如果使用VisualStudio编译还要安装GnuWin工具。而且建议使用官方的MinGW,其他的版本有些工具无法使用或使用导致错误。

http://mingw.org/ 

我将MinGW安装在D盘,配置好了以后,你可以选择下载旧版本的LLVM/Clang自举一下,不过自举可不一定成功。

  配置好了Mingw,修改llvm\tools\clang\lib\Frontend\InitHeaderSearch.cpp 324行(左右) 修改默认Mingw目录(里面是c:/mingw/)

运行Mintty终端切换到llvm目录

./configure   --enable-optimized --disable-assertions

 漫长等待 .......

如果没有错误就继续

make

如果没有错误最后编译成功

这里讲一下,如果用clang来自举会出现问题,ld链接器和clang++兼容存在一点点问题,

LLVM Bug  http://llvm.org/bugs/show_bug.cgi?id=14663 点击进入

如果要clang自举 先要用gcc编译clang3.2 安装好后 再用clang3.2来编译clang3.2,看起来比较复杂,不过已经成功了!3.2编译有问题 

编译好了 两种选择,第一是将LLVM拷贝到Mingw目录,这样Clang依赖Mingw的环境,但是某些程序编译不过去,修改源文件就是这个目的。 

第二种是将gcc的标准库 ,libstdc++ 分贝拷贝到llvm\include,llvm\lib\clang\[version]\include,并修改,设置一个批处理脚本

将Mingw\bin和llvm\bin添加到path,运行脚本就可以通过控制台编程了 

或者也可以使用-isystem指定include.

更多疑问可以留言

展开阅读全文
打赏
0
31 收藏
分享
加载中

引用来自“旅行商人”的评论

关于windows下面各种linux工具的使用,只看过这个
https://github.com/FrankHB/pl-docs/blob/master/zh-CN/mingw-vs-mingw-v64.md
注意到这点:
```
MinGW 是 GNU 工具(包括编译器 GCC 和 GNU binutils 和调试器 GDB 等)在 Win32 上的一个移植,是从 Cygwin 里 fork 出来的。当初只考虑 32 位。和 Cygwin 相比,不强调 POSIX 兼容性而相对强调性能和减小依赖。

  具体来说 MinGW 除了以上工具外,还提供了一个适配于 Win32 的运行时环境。其中 C 标准库实现的二进制文件直接用微软随 Windows 分发的 MSVCRT 。 MinGW 自己的运行时库依赖于MSVCRT和其它系统库。

  而 MinGW GCC 依赖于 MinGW 运行时以及 libgcc 和其它系统库。编译出来的程序一般也要依赖这些库,所以才会写死在默认 specs 里(可以用 gcc -dumpspecs 查看)免得用户随便编译链接个程序还得手动指定一大堆 -l 选项。
```

是因为这个原因所以我在win下面编译用cygwin导致了
```
(Link target) ->
asan_new_delete.obj : error LNK2019: unresolved external symbol "void * __cdecl MemalignFromLocalPool(unsigned long,u
nsigned long)" (?MemalignFromLocalPool@@YAPAXKK@Z) referenced in function "void * __cdecl operator new(unsigned int)" (
??2@YAPAXI@Z) [D:\llvm2\projects\compiler-rt-7.0.0.src\lib\asan\clang_rt.asan-dynamic-i386.vcxproj]
```
吗?
在 Windows 上编译使用 LLVM/Clang 可以使用 Msys2 (Mingw64) https://github.com/Alexpux/MINGW-packages/tree/master/mingw-w64-clang
或者使用 https://github.com/fstudio/clangbuilder 基于 Visual C++ 编译。本教程已经有 6 年多了,因此很多东西已经过时了。 实际上你编译的是使用 Visual C++ 的。
2018/12/21 14:13
回复
举报
关于windows下面各种linux工具的使用,只看过这个
https://github.com/FrankHB/pl-docs/blob/master/zh-CN/mingw-vs-mingw-v64.md
注意到这点:
```
MinGW 是 GNU 工具(包括编译器 GCC 和 GNU binutils 和调试器 GDB 等)在 Win32 上的一个移植,是从 Cygwin 里 fork 出来的。当初只考虑 32 位。和 Cygwin 相比,不强调 POSIX 兼容性而相对强调性能和减小依赖。

  具体来说 MinGW 除了以上工具外,还提供了一个适配于 Win32 的运行时环境。其中 C 标准库实现的二进制文件直接用微软随 Windows 分发的 MSVCRT 。 MinGW 自己的运行时库依赖于MSVCRT和其它系统库。

  而 MinGW GCC 依赖于 MinGW 运行时以及 libgcc 和其它系统库。编译出来的程序一般也要依赖这些库,所以才会写死在默认 specs 里(可以用 gcc -dumpspecs 查看)免得用户随便编译链接个程序还得手动指定一大堆 -l 选项。
```

是因为这个原因所以我在win下面编译用cygwin导致了
```
(Link target) ->
asan_new_delete.obj : error LNK2019: unresolved external symbol "void * __cdecl MemalignFromLocalPool(unsigned long,u
nsigned long)" (?MemalignFromLocalPool@@YAPAXKK@Z) referenced in function "void * __cdecl operator new(unsigned int)" (
??2@YAPAXI@Z) [D:\llvm2\projects\compiler-rt-7.0.0.src\lib\asan\clang_rt.asan-dynamic-i386.vcxproj]
```
吗?
2018/12/21 12:35
回复
举报
用cygwin64的路过出现了问题,麻烦dalao看一眼,蟹蟹
https://my.oschina.net/u/3996713/blog/2991492
2018/12/21 12:25
回复
举报
confugure出错了:
configure: error: g++;clang++;icc required but not found
这该怎么解决呢?
2016/08/21 15:05
回复
举报

引用来自“拙丑”的评论

我是个菜鸟,构建过程中./configure --enable-optimized --disable-assertions 后出现以下问题,麻烦指点下:
sh-3.1$ ./configure --enable-optimized --disable-ssertions
./configure: line 44: chmod: command not found
./configure: line 50: rm: command not found
./configure: line 163: sed: command not found
./configure: line 44: chmod: command not found
./configure: line 50: rm: command not found
./configure: line 163: sed: command not found
./configure: line 424: expr: command not found
./configure: line 436: sed: command not found
./configure: line 450: sed: command not found
: error: cannot create .lineno; rerun with a POSIX shell

没有安装msys么?

2014/04/11 17:18
回复
举报
我是个菜鸟,构建过程中./configure --enable-optimized --disable-assertions 后出现以下问题,麻烦指点下:
sh-3.1$ ./configure --enable-optimized --disable-ssertions
./configure: line 44: chmod: command not found
./configure: line 50: rm: command not found
./configure: line 163: sed: command not found
./configure: line 44: chmod: command not found
./configure: line 50: rm: command not found
./configure: line 163: sed: command not found
./configure: line 424: expr: command not found
./configure: line 436: sed: command not found
./configure: line 450: sed: command not found
: error: cannot create .lineno; rerun with a POSIX shell
2014/04/11 14:21
回复
举报
我用的是TDM'S gcc-32搭配code::Blocks 不知道这个mintty怎么用?请教什么是自举?怎么make?
2014/03/15 12:41
回复
举报

引用来自“Dannyyzh”的评论

不是可以用cmake么?

可以的
2012/12/21 21:11
回复
举报

引用来自“bygreencn”的评论

没用MingW,msvc2010已经成功编译LLVM和clang。

可以打包一下上传 共享
2012/12/21 21:10
回复
举报
没用MingW,msvc2010已经成功编译LLVM和clang。
2012/12/21 20:44
回复
举报
更多评论
打赏
19 评论
31 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部