本文部分内容引用:

中文维基百科

结构化编译器前端--clang介绍

什么是clang编译器?

clang是LLVM编译器工具集的一个用于编译C、C++、Objective-C的前端。LLVM项目的目标是提供一个GNU编译器套装(gcc)的替代品,由苹果公司的赞助开发,其源代码授权采用的是类BSD的伊利诺伊大学厄巴纳-香槟分校开源码许可。

clang编译器的优势与劣势

相比于gcc,clang具有如下优点:

  • 编译速度更快:在某些平台上,clang的编译速度要明显快于gcc。
  • 占用内存更小:clang生成的AST所占用的内存通常是gcc的五分之一左右。
  • 模块化的设计:clang采用基于库的模块化设计,更易于IDE的集成及其他用途的重用。
  • 诊断信息可读性强:在编译过程中,clang会创建并保留大量详细的元数据 (metadata),这将更有利于调试和错误报告。
  • 设计更清晰简单,容易理解,易于扩展加强。与代码基础较为古老的gcc相比,学习曲线会显得更为平缓。

当前 Clang 还处在不断完善过程中,相比于gcc, clang在以下方面还需要加强:

  • 需要支持更多语言:gcc除了支持 C/C++/Objective-C, 还支持Fortran/Pascal/Java/Ada/Go等其他语言。clang 目前基本上只支持C/C++/Objective-C/Objective-C++这四种语言。
  • 需要加强对C++的支持:clang对C++的支持依然落后于gcc,clang 还需要加强对C++ 提供全方位支持。
  • 需要支持更多平台:由于gcc流行的时间比较长,已经被广泛使用,对各种平台的支持也很完备。clang目前支持的平台有 Linux/Windows/Mac OS。

安装LLVM + clang

二进制安装

  • 纯Windows环境:

    可以从http://llvm.org/releases/下载相应的安装包进行安装。目前最新版本为3.8

  • cygwin下的apt-cyg:

	apt-cyg install clang
  • Linux下的yum:
	sudo yum install clang
  • Linux下的apt-get(有时候需要自己配置一下相关的软件源):
	sudo apt-get install clang-3.4 clang-3.4-doc libclang-common-3.4-dev libclang-3.4-devlibclang1-3.4 libclang1-3.4-dbg libllvm-3.4-ocaml-dev libllvm3.4 libllvm3.4-dbg lldb-3.4 llvm-3.4 llvm-3.4-dev llvm-3.4-doc llvm-3.4-examples llvm-3.4-runtime clang-modernize-3.4 clang-format-3.4 python-clang-3.4 lldb-3.4-dev

源码安装

  • 第一步,下载llvm代码:
	git clone git@github.com:llvm-mirror/llvm.git
  • 第二步,进入llvm/tools目录并下载clang代码
	cd llvm/tools
git clone git@github.com:llvm-mirror/clang.git
  • 第三步,进入llvm/projects目录并下载compiler-rt代码:
	cd ../projects
git clone git@github.com:llvm-mirror/compiler-rt.git
  • 第四步,在llvm所在目录新建与llvm同一级的目录build,并在其中构建llvm和clang:
	cd ../..
mkdir build
cd build
../llvm/configure --enable-optimized --enable-assertions
make
make install

使用clang编译C程序

clang的用法与gcc基本相同,我们可以写一个脚本来验证一下编译器是否已经安装完成:

import os
import sys
import shutil if not len(sys.argv) in range(2, 3):
print("Usage: hello_c.py <compiler>")
exit(1) code = "#include <stdio.h>\n int main(void) { printf(\"hello world!\\n\"); return 0;} " if(not os.path.exists("example")):
os.mkdir("example") file = open(r"example/hello.c",'w')
file.writelines(code)
file.close() cmd = sys.argv[1] + r" example/hello.c -o example/test.exe"
os.system(cmd)
os.system(r"example/test.exe") if(os.path.exists("example")):
shutil.rmtree("example")

然后,我们只需要在shell中输入python hello_c.py clang即可,如果看到输出一行“hello world”说明编译器已经可以正常工作。

clang编译器简介的更多相关文章

  1. 微软承诺将在今年的 Visual C++ 更新中加入 Clang 编译器

    微软最近发布将在2015年11月 Visual C++ 更新中加入 Clang 编译器 ,Clang 开源编译器以相比GCC更快的编译速度和更优的错误提示著称. Clang关于C,C++,及Objec ...

  2. 转:GCC,LLVM,Clang编译器对比

    GCC,LLVM,Clang编译器对比   转自: http://www.cnblogs.com/qoakzmxncb/archive/2013/04/18/3029105.html 在XCode中, ...

  3. 深入研究Clang(四) Clang编译器的简单分析

    作者:史宁宁(snsn1984) 首先我们确定下Clang编译器的详细内容和涵盖范围.之前在<LLVM每日谈之二十 Everything && Clang driver>中 ...

  4. NDK clang编译器的一个bug

    NDK clang编译器的一个bug 问题代码 float32_t Sum_float(float32_t *data, const int count) { float32x4_t res = vd ...

  5. Objective-C学习备忘录:Clang编译器编译运行Objective-C代码

    我们都知道可以通过Apple公司的Xcode工具来学习Objective-C编程语言,但是能不能脱离XCode这个IDE进行Objective-C学习呢?当然是可以的.首先作为计算机科班出身的程序员都 ...

  6. GCC,LLVM,Clang编译器对比

    http://www.cnblogs.com/qoakzmxncb/archive/2013/04/18/3029105.html   在XCode中,我们经常会看到这些编译选项(如下图),有些人可能 ...

  7. 记一起由 Clang 编译器优化触发的 Crash

    摘要:一个有意思的 Crash 探究过程,Clang 有 GCC 没有 本文首发于 Nebula Graph 官方博客:https://nebula-graph.com.cn/posts/troubl ...

  8. iOS编程 手动忽略clang编译器警告

    在iOS开发过程中, 我们可能会碰到一些系统方法弃用, weak.循环引用.不能运行之类的警告. 有代码洁癖的孩子们非常想消除他们, 今天就让我们来一次Fuck 警告.! 首先学会主要的语句 #pra ...

  9. cmake之指定clang(++)编译器为默认编译器

    1.说明 本文演示环境的cmake版本3.18 clang是自己源码安装的,非获取已经编译好的binary 2.代码 2.1 添加下面的代码到CMakeLists.txt中,且放到 project语句 ...

随机推荐

  1. mac 下配置tomcat

    下面就是一些简单的步骤,帮你把Tomcat7安装在你的Mac上. 下载一个 二进制包: apache-tomcat-7.0.27.tar.gz ,可以在Apache的官方网站找到. 双击解压在你的下载 ...

  2. people have been arrested under other offences instead.

    Homosexuality is not explicitly banned in Egypt but gay people have been arrested under other offenc ...

  3. C# FTP/SFTP文件传输控件FTP for .NET/.NET CF 详细介绍

    FTP for .NET将FTP客户端功能添加到您的应用程序之中..NET控件的FTP支持所有常用的FTP服务器以及代理服务器,包括可扩展的目录解析.同步以及异步操作.主动与被动模式.以VB.NET与 ...

  4. Ibatis动态拼装sql,常用标签总结及举栗子。

    今天得到项目经理一项任务,就是拼装sql,第一次见到,不是太懂,赶紧回来睡一觉再说,由于这次的项目orm使用的是ibatis框架,所以需要使用动态拼装sql,或者是ognl语言,这门语言不是专属于ib ...

  5. SQL获取汉字首字母

    )) ) as begin ) ) collate Chinese_PRC_CI_AS,letter )) insert into @t(chr,letter) select '吖','A' unio ...

  6. STM32 HAL固件库编程的文件构架

    对于我这种以前只接触过51和AVR单片机编程的小菜来说,现在开始学习STM32的编程,对于函数的功能以及C语言的语法都还好理解,难的是它提供的那一套硬件抽象层(HAL)驱动是怎么和其他的东东搭配在一起 ...

  7. JS总结 运算符 条件语句

    算术运算符+-*/ 与数学计算一致,配合()号进行各种计算 另外,+号还可以达到连接的作用.例如: var a = 15; alert("a的值等于"+a); 前后增减量运算符: ...

  8. Spring中的IOC\DI\AOP等概念的简单学习

    IoC(Inversion of Control,控制反转).这是spring的核心,贯穿始终, 所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系.Spr ...

  9. mybatis配置文件查询参数的传递

    通常来说,参数传递可以使用#与$进行编写,但是使用#的效率更高,使用$方式,查看日志更方便些,尤其是当执行的sql语句非常麻烦的时候. 1) 接口 形式 以下方式 [传递参数是一个实体] public ...

  10. Asp.net Web.Config - 配置元素 caching

    Asp.net Web.Config - 配置元素 caching 记得之前在写缓存DEMO的时候,好像配置过这个元素,好像这个元素还有点常用. 一.caching元素列表   元素 说明 cache ...