clang


简历下载 2019-09-19 22:37:23 简历下载
[摘要]clang篇(1):LLVM及Clang、llvmVLIM指令调度算法分析http: wenku baidu com view 919d18868762caaedd33d413 html调度算法:http: wenku baidu com view d6432ed5c1c708a1284a

【www.shanpow.com--简历下载】

clang篇(1):LLVM及Clang、llvm

 
VLIM指令调度算法分析
http://wenku.baidu.com/view/919d18868762caaedd33d413.html
调度算法:
http://wenku.baidu.com/view/d6432ed5c1c708a1284a4422.html
流水线技术
http://baike.baidu.com/view/61745.htm#2
关键路径
http://baike.baidu.com/view/288224.htm
__attribute__详解
http://wenku.baidu.com/view/a63fe6c56137ee06eff91836.html
LLVM
http://people.cs.nctu.edu.tw/~chenwj/dokuwiki/doku.php?id=llvm
LLVM2.0自带汇编器不支持Intel汇编语法
http://www.cocoachina.com/bbs/read.php?tid-53788.html
编译器后端,寄存器分配算法
http://blog.csdn.net/lm2302293/article/details/6790812
前瞻-全时优化和LLVM-2
http://blog.csdn.net/lm2302293/article/details/6798745
前瞻-全时优化和LLVM-1
http://blog.csdn.net/lm2302293/article/details/6798736
编译器后端寄存器分配算法SSA(静态单一赋值法)
http://blog.csdn.net/lm2302293/article/details/6791752
http://wenku.baidu.com/view/045ec6dba58da0116c174977.html:
The LLVM Compiler System
http://wenku.baidu.com/view/8a2516da50e2524de5187e39.html:
基于LLVM架构的ARM后端移植!!
http://llvm.org/pubs/2002-12-LattnerMSThesis.pdf:
LLVM: An Infrastructure for Multi-Stage Optimization!
LLVM(Low Level Virtual Machine),底层虚拟机,是一个编译器的基础建设,以C++写成。
LLVM属于编译器的中间层,它的输入是编译器的IF代码,输出经过最佳化的IF代码。然后再被编译器转化为机器相关的汇编代码。
LLVM支持语言无关的指令集和类型系统。指令采用静态单赋值形式。LLVM是为了任意一种编程语言写成的程式,利用虚拟技术,创造出编译时期,链结时期,执行时期以及“闲置时期”的最佳化。它最早是以 C/C++为实作对象,目前它支援了包括Objective-C, Fortran, Ada, Haskell, Java bytecode, Python, Ruby, ActionScript, GLSL以及其他语言。
LLVM 专案起源于2000年伊利诺伊大学厄巴纳-香槟分校 Vikram Adve 与 Chris Lattner 的研究发展而成,他们想要为所有静态及动态语言创造出动态的编译技术。LLVM是以 BSD 授权来发展的开源码软件。在2005年,苹果电脑雇用了Chris Lattner及他的团队,为了苹果电脑开发应用程式系统。
LLVM定义了一个虚拟机的语言。然后再这个语言的基础上,实现了很多的功能,例如大多数的优化都是基于这个虚拟机的语言来进行的。(这是和GCC很大的 不同,我想也是delphij提到的更好的优化的原因.) 你可以这么理解,LLVM就是建立了很多个积木块,写编译器就是搭积木。
LLVM-GCC就是一个积木块,它把C代码编译成LLVM的语言。
LLVM-GCC 模块 => LLVM CODE -> optimize -> xxx不同的积木块 x86代码生成模块binary <=
这样,我们写两个积木就实现了一个编译器。如果要不同的平台,我们换最后那个。不同的语言,我们换第一个。
另外,我认为这是一个趋势。微软的phoeni项目和LLVM是非常的类似的。
用VB+LLVM写一个山寨编译器:http://www.vbgood.com/thread-98641-1-1.html
llvm-gcc的前端是gcc。 clang是llvm项目自己写的编译器。clang目前还缺少一些语法的支持,不过FreeBSD未来计划采用的是clang,因为它的结构更清晰,而且将会支持最新的C/C++标准。
学习LLVM的方法:
http://hi.baidu.com/zhanghuikl/blog/item/4d6a25f31e7dc05c342acc15.html
LLVM 与 Clang 介绍:
参见:http://linuxtoy.org/archives/llvm-and-clang.html
LLVM 是 Low Level Virtual Machine 的简称,这个库提供了与编译器相关的支持,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。简而言之,可以作为多种语言编译器的后台来使用。如果这样还比较抽象的话,介绍下 Clang 就知道了:Clang 是一个 C++ 编写、基于 LLVM、发布于 LLVM BSD 许可证下的 C/C++/Objective C/Objective C++ 编译器,其目标(之一)就是超越 GCC。
Clang 开发事出有因,Wiki 介绍如下:
Apple 使用 LLVM 在不支持全部 OpenGL 特性的 GPU (Intel 低端显卡) 上生成代码 (JIT),令程序仍然能够正常运行。之后 LLVM 与 GCC 的集成过程引发了一些不快,GCC 系统庞大而笨重,而 Apple 大量使用的 Objective-C 在 GCC 中优先级很低。此外 GCC 作为一个纯粹的编译系统,与 IDE 配合很差。加之许可证方面的要求,Apple 无法使用修改版的 GCC 而闭源。于是 Apple 决定从零开始写 C family 的前端,也就是基于 LLVM 的 Clang 了。
Clang 的特性:
快:通过编译 OS X 上几乎包含了所有 C 头文件的 carbon.h 的测试,包括预处理 (Preprocess),语法 (lex),解析 (parse),语义分析 (Semantic Analysis),抽象语法树生成 (Abstract Syntax Tree) 的时间,Clang 是 Apple GCC 4.0 的 2.5x 快。(2007-7-25)
内存占用小:Clang 内存占用是源码的 130%,Apple GCC 则超过 10x。
诊断信息可读性强:我不会排版,推荐去网站观看。其中错误的语法不但有源码提示,还会在错误的调用和相关上下文的下方有~~~~~和^的提示,相比之下 GCC 的提示很天书。
GCC 兼容性。
设计清晰简单,容易理解,易于扩展增强。与代码基础古老的 GCC 相比,学习曲线平缓。
基于库的模块化设计,易于 IDE 集成及其他用途的重用。由于历史原因,GCC 是一个单一的可执行程序编译器,其内部完成了从预处理到最后代码生成的全部过程,中间诸多信息都无法被其他程序重用。Clang 将编译过程分成彼此分离的几个阶段,AST 信息可序列化。通过库的支持,程序能够获取到 AST 级别的信息,将大大增强对于代码的操控能力。对于 IDE 而言,代码补全、重构是重要的功能,然而如果没有底层的支持,只使用 tags 分析或是正则表达式匹配是很难达成的。
当然,GCC 也有其优势:
支持 JAVA/ADA/FORTRAN
当前的 Clang 的 C++ 支持落后于 GCC,参见 http://clang.llvm.org/cxx_status.html。(近日 Clang 已经可以自编译,见 http://www.phoronix.com/scan.php?page=news_item&px=Nzk2Mw)
GCC 支持更多平台
GCC 更流行,广泛使用,支持完备
GCC 基于 C,不需要 C++ 编译器即可编译
相信介绍到这里大家能够对 Clang 和 LLVM 有所了解了。除去 Clang 之外,LLVM 还被用在 Gallium3D 中进行 JIT 优化,Xorg 中的 pixman 也有考虑使用 LLVM 来优化执行速度,llvm-lua 使用 LLVM 来编译 Lua 代码,gpuocelot 使用 LLVM 可以令 CUDA 程序无需重新编译即可运行在多核 X86CPU、IBM Cell、支持 OpenCL 的设备之上... 我个人感觉 Apple 在开源界口碑较差(也许是我的错觉?),不过 Apple 也为开源界贡献了不少,Webkit,OpenCL(虽说只是个标准),Clang。我最为佩服的是虽然出身于命令行之上的 Unix 族系统,但有魄力写出自成体系的图形栈,其图形界面优美而人性化,可谓也为开源界贡献了自己的精神与思想。 对于 Clang 这个很有潜力的项目,我希望其 C++ 支持(尤其是 template 支持)能够早日完善。因为 GCC 在 template 出错时的诊断信息如同小说一般...

clang篇(2):GCC,LLVM,Clang编译器对比


在XCode中,我们经常会看到这些编译选项(如下图),有些人可能会有些茫然,本文将对GCC4.2、LLVM GCC 4.2、LLVM compliler 2.0三个编译选项进行一个详细的介绍。
GCC
    GCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。它是一套以 GPL 及 LGPL 许可证所发行的自由软件,也是 GNU计划的关键部分,亦是自由的类Unix及苹果电脑 Mac OS X 操作系统的标准编译器。
GCC 原名为 GNU C 语言编译器,因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。之后也变得可处理 Fortran、Pascal、Objective-C、Java, 以及 Ada与其他语言。
 
LLVM
     LLVM 是 Low Level Virtual Machine 的简称,这个库提供了与编译器相关的支持,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。简而言之,可以作为多种语言编译器的后台来使用。如果这样还比较抽象的话,介绍下 Clang 就知道了:Clang 是一个 C++ 编写、基于 LLVM、发布于 LLVM BSD 许可证下的 C/C++/Objective C/Objective C++ 编译器,其目标(之一)就是超越 GCC。
 
LLVM历史
    Apple(包括中后期的NeXT) 一直使用GCC作为官方的编译器。GCC作为开源世界的编译器标准一直做得不错,但Apple对编译工具会提出更高的要求。
    一方面,是Apple对Objective-C语言(甚至后来对C语言)新增很多特性,但GCC开发者并不买Apple的帐——不给实现,因此索性后来两者分成两条分支分别开发,这也造成Apple的编译器版本远落后于GCC的官方版本。另一方面,GCC的代码耦合度太高,不好独立,而且越是后期的版本,代码质量越差,但Apple想做的很多功能(比如更好的IDE支持)需要模块化的方式来调用GCC,但GCC一直不给做。甚至最近,《GCC运行环境豁免条款 (英文版)》从根本上限制了LLVM-GCC的开发。 所以,这种不和让Apple一直在寻找一个高效的、模块化的、协议更放松的开源替代品,于是Apple请来了编译器高材生Chris Lattner(2000年,本科毕业的Chris Lattner像中国多数大学生一样,按部就班地考了GRE,最终前往UIUC(伊利诺伊大学厄巴纳香槟分校),开始了艰苦读计算机硕士和博士的生涯。在这阶段,他不仅周游美国各大景点,更是努力学习科学文化知识,翻烂了“龙书”(《Compilers: Principles, Techniques, and Tools》),成了GPA牛人【注:最终学分积4.0满分】,以及不断地研究探索关于编译器的未知领域,发表了一篇又一篇的论文,是中国传统观念里的“三好学生”。他的硕士毕业论文提出了一套完整的在编译时、链接时、运行时甚至是在闲置时优化程序的编译思想,直接奠定了LLVM的基础。LLVM在他念博士时更加成熟,使用GCC作为前端来对用户程序进行语义分析产生IF(Intermidiate Format),然后LLVM使用分析结果完成代码优化和生成。这项研究让他在2005年毕业时,成为小有名气的编译器专家,他也因此早早地被Apple相中,成为其编译器项目的骨干)。
    刚进入Apple,Chris Lattner就大展身手:首先在OpenGL小组做代码优化,把LLVM运行时的编译架在OpenGL栈上,这样OpenGL栈能够产出更高效率的图形代码。如果显卡足够高级,这些代码会直接扔入GPU执行。但对于一些不支持全部OpenGL特性的显卡(比如当时的Intel GMA卡),LLVM则能够把这些指令优化成高效的CPU指令,使程序依然能够正常运行。这个强大的OpenGL实现被用在了后来发布的Mac OS X 10.5上。同时,LLVM的链接优化被直接加入到Apple的代码链接器上,而LLVM-GCC也被同步到使用GCC4代码。
 
Clang历史
    Apple吸收Chris Lattner的目的要比改进GCC代码优化宏大得多——GCC系统庞大而笨重,而Apple大量使用的Objective-C在GCC中优先级很低。此外GCC作为一个纯粹的编译系统,与IDE配合得很差。加之许可证方面的要求,Apple无法使用LLVM 继续改进GCC的代码质量。于是,Apple决定从零开始写 C、C++、Objective-C语言的前端 Clang,完全替代掉GCC。
    正像名字所写的那样,Clang只支持C,C++和Objective-C三种C家族语言。2007年开始开发,C编译器最早完成,而由于Objective-C相对简单,只是C语言的一个简单扩展,很多情况下甚至可以等价地改写为C语言对Objective-C运行库的函数调用,因此在2009年时,已经完全可以用于生产环境。C++的支持也热火朝天地进行着。
 
    下面这张图将显示GCC、LLVM-GCC、LLVM Compiler这三个编译选项的不同点:
对比    
    作为一种新的编译器,我们来看Clang和GCC各有什么优缺点:
    Clang特性
快:通过编译 OS X 上几乎包含了所有 C 头文件的 carbon.h 的测试,包括预处理 (Preprocess),语法 (lex),解析 (parse),语义分析 (Semantic Analysis),抽象语法树生成 (Abstract Syntax Tree) 的时间,Clang 是 Apple GCC 4.0 的 2.5x 快。(2007-7-25)
内存占用小:Clang 内存占用是源码的 130%,Apple GCC 则超过 10x。
诊断信息可读性强:我不会排版,推荐去网站观看。其中错误的语法不但有源码提示,还会在错误的调用和相关上下文的下方有~~~~~和^的提示,相比之下 GCC 的提示很天书。
GCC 兼容性。
设计清晰简单,容易理解,易于扩展增强。与代码基础古老的 GCC 相比,学习曲线平缓。
基于库的模块化设计,易于 IDE 集成及其他用途的重用。由于历史原因,GCC 是一个单一的可执行程序编译器,其内部完成了从预处理到最后代码生成的全部过程,中间诸多信息都无法被其他程序重用。Clang 将编译过程分成彼此分离的几个阶段,AST 信息可序列化。通过库的支持,程序能够获取到 AST 级别的信息,将大大增强对于代码的操控能力。对于 IDE 而言,代码补全、重构是重要的功能,然而如果没有底层的支持,只使用 tags 分析或是正则表达式匹配是很难达成的。
     当然,GCC 也有其优势:
支持 JAVA/ADA/FORTRAN
当前的 Clang 的 C++ 支持落后于 GCC,参见http://clang.llvm.org/cxx_status.html。(近日 Clang 已经可以自编译,见http://www.phoronix.com/scan.php?page=news_item&px=Nzk2Mw)
GCC 支持更多平台
GCC 更流行,广泛使用,支持完备
GCC 基于 C,不需要 C++ 编译器即可编译
要选择哪个
     那么三个编译选项,要选择哪一个呢?目前不推荐使用老的GCC4.2,因为苹果不会维持它了,而且LLVM-GCC看起来会更好。在项目中途改编译选项可是一个大变动,所以,如果你要改,当然需要经过慎重完整的测试。
    对新的项目而言,LLVM-GCC看起來应该是个安全的选择,苹果公司认为它够稳定够成熟,所以才把它当做Xcode 4的预设选项(你或许不会把稳定成熟这两个字眼跟Xcode 4本身画上等号),而且,既然选项使用的是GCC parser,向后兼容性应该没问题。     我说LLVM-GCC是个安全的选项,但我并不是指Clang/LLVM比较不安全,只是成熟度还沒那么高效了,我将一些以前的代码拿到Xcode 4上,使用LLVM 2.0编译器重新编译,到目前为止还沒发现任何问题。
 
参考文档:
http://baike.baidu.com/view/4848.htm
http://hi.baidu.com/zhanghuikl/blog/item/71e8a6018172df0f728da53e.html
http://www.programmer.com.cn/9436/

clang篇(3):Clang+llvm windows运行环境配置


                 原创
2014年12月31日 18:38:32
下了官网Pre-built Binaries:Clang
for Windows( llvm.org/releases/3.5.0/LLVM-3.5.0-win32.exe
)03 Sep 2014 3.5.0
The LLVM Compiler Infrastructure(llvm.org) download
LLVM(llvm.org/releases/)
由于刚刚安装了 TDM GCC 4.9.2 tdm64-gcc-4.9.2-3.exe 2014 December 12th(tdm-gcc.tdragon.net)
用mklink将C:\mingw指向tdm64-gcc-4.9.2-3安装目录。
[cpp] view plain copy print?
/* hello.c */  
#include <stdio.h>  
  
int main() {  
  printf("hello world\n");  
  return 0;  
}  
>clang hello.c
hello.c:2:10:fatal error: "stdio.h" file not found
#include <stdio.h>
         ^
1 error generated.

难道又要下载 LLVM + Clang 源代码,修改
llvm-3.5.0.src\tools\clang\lib\Frontend\下的 InitHeaderSearch.cpp,添加tdm64-gcc-4.9.2-3 C/C++ include search path头文件搜索路径,重新编译一次(具体参看旧文Clang+llvm在windows下面怎么配置运行)。看了3.5.0源码,官网Pre-builtBinaries支持到MiniGW
4.8.2。难道每次使用新版 MinGW,都要重复这恼人的编译。
现在,告诉你,只要添加几个环境变量即可。
PATH添加 编译器和LLVM+Clang Command Line Path 命令行运行路径。
至于C/C++ include search path 头文件搜索路径:
使用 MinGW 的,要设置:
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
使用 Visual C++ 的,要设置:
INCLUDE
当然,如果有附加的链接库
MinGW 设置LIBRARY_PATH
VisualC++ 设置LIB
下面以使用 tdm64-gcc-4.9.2 为例:
Run-Clang.bat [plain] view plain copy print?
@remset run llvm+clang with mingw path env  
@echooff  
setMINGW_HOME=c:\mingw  
setMINGW_VERSION=4.9.2  
set"PATH=%MINGW_HOME%\bin;%PATH%"  
set"C_INCLUDE_PATH=%MINGW_HOME%\include;%MINGW_HOME%\x86_64-w64-mingw32\include"  
set"CPLUS_INCLUDE_PATH=%C_INCLUDE_PATH%;%MINGW_HOME%\lib\gcc\x86_64-w64-mingw32\%MINGW_VERSION%\include;%MINGW_HOME%\lib\gcc\x86_64-w64-mingw32\%MINGW_VERSION%\include\c++;%MINGW_HOME%\lib\gcc\x86_64-w64-mingw32\%MINGW_VERSION%\include\c++\x86_64-w64-mingw32;%MINGW_HOME%\lib\gcc\x86_64-w64-mingw32\%MINGW_VERSION%\include\c++\backward"  
setLLVM_HOME=c:\llvm  
set"PATH=%LLVM_HOME%\bin;%PATH%"  
%comspec%   转载请注明引用地址 :http://blog.csdn.net/gocad/article/details/42297829 谢谢
如果使用 tdm32-gcc-4.9.2 则 [plain] view plain copy print?
C_INCLUDE_PATH=%MINGW_HOME%\include  
CPLUS_INCLUDE_PATH=%MINGW_HOME%\include;%MINGW_HOME%\lib\gcc\mingw32\%MINGW_VERSION%\include;%MINGW_HOME%\lib\gcc\mingw32\%MINGW_VERSION%\include\c++;%MINGW_HOME%\lib\gcc\mingw32\%MINGW_VERSION%\include\c++\mingw32;%MINGW_HOME%\lib\gcc\mingw32\%MINGW_VERSION%\include\c++\backward  
使用其它版本 MinGW 的,请根据各版本实际路径设置。当然也可以自己编辑成像vcvars32.bat带参数调用。
VisualC++ 用户调用现成的Visual Studio Native Tools Command Prompt,或自己调用 vcvars32.bat 设置 Visual C++ 命令行编译环境。 或Installing MSVC integration
下面是有些需要注意的地方:
关于 –m32/-m64,
clang, clang++,clang-cl
默认 ( Target: i686-pc-windows-gnu/i686-pc-windows-msvc,Thread model: posix )
–m32( Target:i386-pc-windows-gnu/i386-pc-windows-msvc,Thread model: posix )
–m64(Target: x86_64-pc-windows-gnu/x86_64-pc-windows-msvc,Thread model:
posix )
这与tdm64-gcc-4.9.2默认-m64不同,所以要编译 x64 执行代码,请显式调用-m64。
还有 tdm64-gcc-4.9.2 默认 –m64支持
__int128 is supported on thishost. ( 见c++config.h )
如果同时使用 STL algorithm 与
–m32时,请将
CPLUS_INCLUDE_PATH 中的%MINGW_HOME%\lib\gcc\x86_64-w64-mingw32\%MINGW_VERSION%\include\c++\x86_64-w64-mingw32更改为%MINGW_HOME%\lib\gcc\x86_64-w64-mingw32\%MINGW_VERSION%\include\c++\x86_64-w64-mingw32\32以免编译错误。
如果要用Clang+llvm+MinGW编译 32位执行代码,最好还是使用 MinGW(32),避免因使用 MinGW-w64 设置不恰当,而生成的编译错误。
 
Clang具体调用模式与使用的命令参数,请用–v命令选项进行追踪
-v    Show commands to run and use verbose output
例如:
[plain] view plain copy print?
D:\>clang++ -v hello.c  
clang version 3.5.0 (217039)  
Target: i686-pc-windows-gnu  
Thread model: posix  
clang++.exe: warning: treating "c" input as "c++" when in C++ mode, this behavior is deprecated  
 "c:\llvm\bin\clang++.exe" -cc1 -triple i686-pc-windows-gnu -emit-obj -mrelax-al  
l -disable-free -main-file-name hello.c -mrelocation-model static -mdisable-fp-e  
lim -fmath-errno -masm-verbose -mconstructor-aliases -target-cpu pentium4 -v -dw  
arf-column-info -resource-dir "c:\\llvm\\bin\\..\\lib\\clang\\3.5.0" -c-isystem  
"c:\\mingw\\include" -c-isystem "c:\\mingw\\x86_64-w64-mingw32\\include" -cxx-is  
ystem "c:\\mingw\\include" -cxx-isystem "c:\\mingw\\x86_64-w64-mingw32\\include"  
 -cxx-isystem "c:\\mingw\\lib\\gcc\\x86_64-w64-mingw32\\4.9.2\\include" -cxx-isy  
stem "c:\\mingw\\lib\\gcc\\x86_64-w64-mingw32\\4.9.2\\include\\c++" -cxx-isystem  
 "c:\\mingw\\lib\\gcc\\x86_64-w64-mingw32\\4.9.2\\include\\c++\\x86_64-w64-mingw  
32" -cxx-isystem "c:\\mingw\\lib\\gcc\\x86_64-w64-mingw32\\4.9.2\\include\\c++\\  
backward" -fdeprecated-macro -fdebug-compilation-dir "D:\\" -ferror-limit 19 -fm  
essage-length 80 -mstackrealign -fno-use-cxa-atexit -fobjc-runtime=gcc -fcxx-exc  
eptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o "C:\\Temp\  
\hello-0a5974.o" -x c++ hello.c  
clang -cc1 version 3.5.0 based upon LLVM 3.5.0 default target i686-pc-windows-gnu  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.7.0"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.7.0/x86_64-w64-mingw32"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.7.0/i686-w64-mingw32"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.7.0/backward"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.7.1"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.7.1/x86_64-w64-mingw32"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.7.1/i686-w64-mingw32"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.7.1/backward"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.7.2"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.7.2/x86_64-w64-mingw32"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.7.2/i686-w64-mingw32"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.7.2/backward"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.7.3"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.7.3/x86_64-w64-mingw32"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.7.3/i686-w64-mingw32"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.7.3/backward"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.8.0"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.8.0/x86_64-w64-mingw32"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.8.0/i686-w64-mingw32"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.8.0/backward"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.8.1"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.8.1/x86_64-w64-mingw32"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.8.1/i686-w64-mingw32"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.8.1/backward"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.8.2"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.8.2/x86_64-w64-mingw32"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.8.2/i686-w64-mingw32"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0/../../../include/  
c++/4.8.2/backward"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.7.0/include/c++"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.7.0/include/c++/mingw32"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.7.0/include/c++/backward"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.7.1/include/c++"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.7.1/include/c++/mingw32"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.7.1/include/c++/backward"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.7.2/include/c++"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.7.2/include/c++/mingw32"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.7.2/include/c++/backward"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.7.3/include/c++"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.7.3/include/c++/mingw32"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.7.3/include/c++/backward"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.8.0/include/c++"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.8.0/include/c++/mingw32"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.8.0/include/c++/backward"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.8.1/include/c++"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.8.1/include/c++/mingw32"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.8.1/include/c++/backward"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.8.2/include/c++"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.8.2/include/c++/mingw32"  
ignoring nonexistent directory "c:/MinGW/lib/gcc/mingw32/4.8.2/include/c++/backward"  
ignoring nonexistent directory "/usr/include/c++/4.4"  
ignoring nonexistent directory "/usr/local/include"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0\../../../i686-w64  
-mingw32/include"  
ignoring nonexistent directory "c:\llvm\bin\..\lib\clang\3.5.0\../../../x86_64-w  
64-mingw32/include"  
ignoring nonexistent directory "/mingw/include"  
ignoring nonexistent directory "/usr/include"  
ignoring duplicate directory "c:\mingw\include"  
#include "..." search starts here:  
#include <...> search starts here:  
 c:\mingw\include  
 c:\mingw\x86_64-w64-mingw32\include  
 c:\mingw\lib\gcc\x86_64-w64-mingw32\4.9.2\include  
 c:\mingw\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++  
 c:\mingw\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\x86_64-w64-mingw32  
 c:\mingw\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\backward  
 c:\llvm\bin\..\lib\clang\3.5.0\include  
 c:\llvm\bin\..\lib\clang\3.5.0\../../../include  
End of search list.  
 "c:\mingw\bin\g++.exe" -v -m32 -o a.out "C:\\Temp\\hello-0a5974.o"  
Using built-in specs.  
COLLECT_GCC=c:\mingw\bin\g++.exe  
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/4.9.2/lto-wra  
pper.exe  
Target: x86_64-w64-mingw32  
Configured with: ../../../src/gcc-4.9.2/configure --build=x86_64-w64-mingw32 --e  
nable-targets=all --enable-languages=ada,c,c++,fortran,lto,objc,obj-c++ --enable  
-libgomp --enable-lto --enable-graphite --enable-cxx-flags=-DWINPTHREAD_STATIC -  
-disable-build-with-cxx --disable-build-poststage1-with-cxx --enable-libstdcxx-d  
ebug --enable-threads=posix --enable-version-specific-runtime-libs --enable-full  
y-dynamic-string --enable-libstdcxx-threads --enable-libstdcxx-time --with-gnu-l  
d --disable-werror --disable-nls --disable-win32-registry --prefix=/mingw64tdm -  
-with-local-prefix=/mingw64tdm --with-pkgversion=tdm64-1 --with-bugurl=http://td  
m-gcc.tdragon.net/bugs  
Thread model: posix  
gcc version 4.9.2 (tdm64-1)  
COMPILER_PATH=c:/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/4.9.2/;c:/mingw/bin  
/../libexec/gcc/;c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x8  
6_64-w64-mingw32/bin/  
LIBRARY_PATH=c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/32/;c:/mingw/bin/.  
./lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/lib/../lib32/;  
c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/;c:/mingw/bin/../lib/gcc/;C:/Mi  
nGW/lib/;D:/dev/msys64/usr/lib/;c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2  
/../../../../x86_64-w64-mingw32/lib/;c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/  
4.9.2/../../../  
COLLECT_GCC_OPTIONS="-v" "-m32" "-o" "a.out" "-mtune=generic" "-march=x86-64"  
 c:/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/4.9.2/collect2.exe -plugin c:/mi  
ngw/bin/../libexec/gcc/x86_64-w64-mingw32/4.9.2/liblto_plugin-0.dll -plugin-opt=  
c:/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/4.9.2/lto-wrapper.exe -plugin-opt  
=-fresolution=C:\Temp\cc83PMcQ.res -plugin-opt=-pass-through=-lmingw32 -plugin-o  
pt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-th  
rough=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lp  
thread -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32  
-plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-  
opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-th  
rough=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-  
lmsvcrt -m i386pe --exclude-libs=libpthread.a -Bdynamic -o a.out c:/mingw/bin/..  
/lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/lib/../lib32/cr  
t2.o c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-min  
gw32/lib/../lib32/crtbegin.o -Lc:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/  
32 -Lc:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-min  
gw32/lib/../lib32 -Lc:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2 -Lc:/mingw/  
bin/../lib/gcc -LC:/MinGW/lib -LD:/dev/msys64/usr/lib -Lc:/mingw/bin/../lib/gcc/  
x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/lib -Lc:/mingw/bin/../li  
b/gcc/x86_64-w64-mingw32/4.9.2/../../.. C:\Temp\hello-0a5974.o -Bstatic -lstdc++  
 -Bdynamic -lmingw32 -lgcc -lmoldname -lmingwex -lmsvcrt -lpthread -ladvapi32 -l  
shell32 -luser32 -lkernel32 -lmingw32 -lgcc -lmoldname -lmingwex -lmsvcrt c:/min  
gw/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/lib/..  
/lib32/crtend.o  
  
D:\>   另外就是,关于 --driver-mode 参数:
clang++等效于 clang--driver-mode=g++
clang-cl等效于 clang--driver-mode=cl
--driver-mode可以覆盖内置或默认值:clang-cl --driver-mode=g++ 等效于 clang++
目前,clang-cl 编译 VC x64/amd64 STL algorithm 时,有时会编译不通过,如: [cpp] view plain copy print?
error LNK2019: unresolved external  
 symbol __cxa_call_unexpected referenced in function "public: __int64 __cdecl std::_Temp_iterator<long>::_Maxlen(void)" (?_Maxlen@?$_Temp_iterator@J@std@@QEAA_JXZ)  
error LNK2001: unresolved external  
 symbol __gxx_personality_v0   参考LLVM/Clang
On Windows 2013_09(my.oschina.net/GIIoOS/blog/165542)
下面引自(c.tieba.baidu.com/p/3290080396)
[cpp] view plain copy print?
关于 LLVM Clang。目前 Clang 在 Windows 下都是基于 MingW 的库,所以编译/链接的时候需要把相应的路径设置好。在我的绿色便携版中都已经设置好了。  
llvm-3.5.0.src\tools\clang\tools\driver\driver.cpp
[cpp] view plain copy print?
Clang在Windows上呈现有三种实现,一种是使用VisualStudio,一种是Mingw,还有一种是Cygwin,clang用一个参数是驱动模式--driver-mode  
driver.cpp  
staticconst struct {  
const char*Suffix;  
const char*ModeFlag;  
} suffixes[] = {  
{"clang", nullptr },  
{"clang++", "--driver-mode=g++" },  
{"clang-c++", "--driver-mode=g++" },  
{"clang-cc", nullptr },  
{"clang-cpp", "--driver-mode=cpp" },  
{"clang-g++", "--driver-mode=g++" },  
{"clang-gcc", nullptr },  
{"clang-cl", "--driver-mode=cl" },  
{"cc", nullptr },  
{"cpp", "--driver-mode=cpp" },  
{"cl" , "--driver-mode=cl" },  
{"++", "--driver-mode=g++" },  
};  
下面引自Clang
Compiler User’s Manual(clang.llvm.org/docs/UsersManual.html)
X86
The support for X86 (both 32-bit and 64-bit) is considered stable onDarwin (Mac OS X), Linux, FreeBSD, and Dragonfly BSD: it has been tested
tocorrectly compile many large C, C++, Objective-C, and Objective-C++ codebases.
On x86_64-mingw32,
passing i128(by value)is incompatible with the Microsoft x64 calling convention. You might need totweak WinX86_64ABIInfo::classify() in
lib/CodeGen/TargetInfo.cpp.
For the X86 target, clang supports the -m16 command
line argument which enables16-bit code output. This is broadly similar to using asm(".code16gcc") with
the GNU toolchain.The generated code and the ABI remains 32-bit but the assembler emitsinstructions appropriate for a CPU running in 16-bit mode, with address-sizeand operand-size prefixes to enable 32-bit addressing and operations.
MinGW32
Clang works on some mingw32 distributions. Clang assumes directories asbelow;
C:/mingw/include
C:/mingw/lib
C:/mingw/lib/gcc/mingw32/4.[3-5].0/include/c++
On MSYS, a few tests might fail.
MinGW-w64
For 32-bit (i686-w64-mingw32), and 64-bit (x86_64-w64-mingw32), Clangassumes as below;
GCC versions 4.5.0 to 4.5.3, 4.6.0 to 4.6.2, or 4.7.0 (for the C++ header search path)
some_directory/bin/gcc.exe
some_directory/bin/clang.exe
some_directory/bin/clang++.exe
some_directory/bin/../include/c++/GCC_version
some_directory/bin/../include/c++/GCC_version/x86_64-w64-mingw32
some_directory/bin/../include/c++/GCC_version/i686-w64-mingw32
some_directory/bin/../include/c++/GCC_version/backward
some_directory/bin/../x86_64-w64-mingw32/include
some_directory/bin/../i686-w64-mingw32/include
some_directory/bin/../include
This directory layout is standard for any toolchain you will find on theofficial MinGW-w64
website.
Clang expects the GCC executable “gcc.exe” compiled for i686-w64-mingw32 (or x86_64-w64-mingw32)
to be present on PATH.
Some
tests might fail on x86_64-w64-mingw32.
clang-cl
clang-cl is an alternative command-line interface to Clang driver,designed for compatibility with the Visual C++ compiler, cl.exe.
To enable clang-cl to find system headers, libraries, and the linker whenrun from the command-line, it should be executed inside a Visual
Studio NativeTools Command Prompt or a regular Command Prompt where the environment has beenset up using e.g. vcvars32.bat.
clang-cl can also be used from inside Visual Studio by using an LLVMPlatform Toolset.
转载请注明引用地址 :http://blog.csdn.net/gocad/article/details/42297829
谢谢

本文来源:https://www.shanpow.com/bg/459491/

《clang.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式

相关阅读
  • 应届大学生个人简历下载2023三篇 应届大学生个人简历下载2023三篇
  • 大学生实习个人简历下载【三篇】 大学生实习个人简历下载【三篇】
  • 大学生实习个人简历下载2023汇编4篇 大学生实习个人简历下载2023汇编4篇
  • 在校大学生简历下载2023范文(精选4篇) 在校大学生简历下载2023范文(精选4篇)
  • 在校大学生个人简历下载2023【汇编四篇】 在校大学生个人简历下载2023【汇编四篇】
  • 2022幼儿园教师简历下载精选6篇 2022幼儿园教师简历下载精选6篇
  • pdf转word pdf转word下载 pdf转word pdf转word下载
  • 崔雪莉real电影19禁全裸床戏 崔雪莉real电影19禁全裸床戏
为您推荐
  • 小学六年级语文下册电子版人教版免费下载
    小学六年级语文下册电子版人教版免费下载
    各中小学教材编写出版单位已经提供免费电子版教材链接,你下载了吗?以下是小编整理了关于小学六年级语文下册电子版人教版免费下载,希望你喜欢。小学六年级语文下册电子版人教版免费下载: http:
  • 小学一年级语文下册电子课本人教版链接网址
    小学一年级语文下册电子课本人教版链接网址
    为了应对疫情,全国中小学都延期开学时间,而根据《关于认真做好疫情防控期间教学用书供应工作的通知》(国教材办〔2020〕2号)要求,学生可以免费下载中小学国家课程教材电子版。以下是小编整理了关于小学一年
  • 三年级小学语文下册电子课本人教版免费下载
    三年级小学语文下册电子课本人教版免费下载
    教育部要求,各地教育行政部门指导学校根据需要做好下载免费电子版教材。以下是小编整理了关于三年级小学语文下册电子课本人教版免费下载,希望你喜欢。三年级小学语文下册电子课本人教版免费下载:
  • 泽井芽衣ed2k
    泽井芽衣ed2k
    泽井芽衣,1983年8月31日出生于日本东京,AV女优。以下是blanche小编分享给大家的关于泽井芽衣ed2k、泽井芽衣种子、泽井芽衣步兵番号大全,一起来看看吧!泽井芽衣图片ed2k_泽井芽衣图片种
  • 陆军棋怎么摆放_陆军棋的游戏攻略
    陆军棋怎么摆放_陆军棋的游戏攻略
    军棋,又称陆战棋。估计作为华人没有不知道什么叫做军棋,从小最先玩棋类的就是军棋吧;下面是有陆军棋摆放方法,欢迎参阅。陆军棋摆放方法字朝下摆一种是字朝下摆的(也叫翻棋、明棋)1、军棋的棋子各方均有25个
  • 全职高手动漫全集_全职高手动漫全集链接
    全职高手动漫全集_全职高手动漫全集链接
    全职高手动漫全集已经有了,那么全职高手动漫的全集百度云资源到哪里下载呢?我们也可以找到百度云资源链接来下载全职高手动漫全集,或者百度云盘资源也可以下载全职高手动漫全集。以下就是小编为你精心整理的关于全
  • 2020手机社交软件排行榜
    2020手机社交软件排行榜
    社交软件除了大家熟知的微信,qq之外还有哪些交友软件呢?下面是有2020手机社交软件排行榜,欢迎参阅。2020手机社交软件排行榜10 手机社交软件之遇见(安卓版下载,iOS版下载)遇见(iAround
  • 2020最新里番合集大全
    2020最新里番合集大全
    2020里番预告表中有哪些好看的里番肉番动漫?在那么多类型的动漫中,H肉番是许多宅男腐女们喜欢的一类型。下面小编整理的2020里番合集大全,欢迎下载。2020里番预告表_2020年里番动漫链接_202
  • 2020年最新日本肉番动漫一览表目录
    2020年最新日本肉番动漫一览表目录
    2020最新H里番动漫有哪些呢?日本动漫最新肉番动漫可以在哪里下载观看?2020年有哪些好看的肉番动漫,肉番动漫2020目录有哪些呢?下面是小编精心为你们整理的关于2020最新肉番动漫在线观看的相关内
  • 普京硬汉霸气照片图片大全
    普京硬汉霸气照片图片大全
    普京硬汉霸气照片有的扮酷耍帅,有的卖萌搞笑,下面我们也来一起围观吧。 以下是小编分享给大家的关于最霸气普京图片下载,一起来看看普京霸气照片大全吧!最霸气普京图片下载【最霸气普京图片下载:1】【最霸气普