linux环境c++开发:ubuntu12.04使用llvm3.4.2
什么是 clang/llvm/libc++[1]
clang 是最近几年(在大财主苹果的支持下)发展得非常好的 C 家族语言 (包括C/C++/Obj-C/Obj-C++) 编译器前端,所谓前端,就是它可以认识 C/C++/Obj-C/ObjC++ 代码,并且把它转化成某种更接近机器指令的形式。理论上说,“某种形式”是语法树,但作为一个工具,clang 实际上会帮助你调用链接器生成可执行代码,这跟 gcc 是一样的。
llvm 是一个通用的编译优化和代码生成平台,它定义了一个中间语言 LLVM IR,只要前端把代码编译成 LLVM IR,就可以使用 llvm 丰富的优化模块和代码生成模块。换句话说,llvm 让“创造一种计算机语言”变成了一个相对容易的事情,这件事情会有深远的影响。
libc++ 是针对 clang 特别重写的 C++ 标准库,也算是 clang 的“御用”库了。这就像 libstdc++ 和 gcc 的关系,但 clang 也可以用 libstdc++。
何处下载
http://llvm.org/releases/download.html
目前最新版本为3.4.2;其中提供了为ubuntu12.04_x86_64预编译好的二进制文件;
编译源码
然而事情没有想象中那么简单,我的系统是ubuntu 12.04.4 LTS 32位系统。原先使用预编译好的二进制文件,结果提示无法执行二进制文件。使用ls -l查看clang权限,发现三组用户均有执行权限,因此考虑是编译平台问题,注意到预编译的版本为x86_64,原以为指的是x86与x64平台均可,网上查询之后发现x86_64指的是64位系统。
通过命令
uname -m
可查看ubuntu是32位还是64位,如果是i386到i686,那就是32位系统;如果是x86_64 ,那就是64系统[2]。
无奈只好下载源码在本机上编译。
步骤1:获取源码
http://clang.llvm.org/get_started.html中使用的是svn的方法,当然我们也可以从"何处下载"中提到的地址去下载源码。需要获取的源码有:Clang source code、LLVM source code、Clang Tools Extra(可选)、Compiler RT source code。
这里通过浏览器下载获得源码,参考svn方法,下载完成后将文件夹组织如下
LLVM source code -> llvm
Clang source code -> llvm/tools/clang
Clang Tools Extra(optional) -> llvm/tools/clang/tools/extra
Compiler RT source code -> llvm/projects/compiler-rt
步骤2:编译LLVM和Clang
mkdir build
与llvm目录同层,建立build目录存放编译结果
cd build
../llvm/configure --enable-optimized --enable-targets=host-only
进入build目录,并配置llvm[3],其中的选项在http://llvm.org/docs/GettingStarted.html#getting-started-with-llvm中提到
- ../llvm/configure [options] Some common options:
- --prefix=directory — Specify for directory the full pathname of where you want the LLVM tools and libraries to be installed (default /usr/local).
- --enable-optimized — Compile with optimizations enabled (default is NO).
- --enable-assertions — Compile with assertion checks enabled (default is YES).
- make [-j] — The -j specifies the number of jobs (commands) to run simultaneously. This builds both LLVM and Clang for Debug+Asserts mode. The --enable-optimized configure option is used to specify a Release build.
配置完成后就是
make -j2
make install
测试
clang helloworld.c
会在当前目录下生成a.out文件,./a.out执行之,输出helloworld即大功告成。
[1]http://www.cnblogs.com/ralphjzhang/archive/2011/12/02/2272671.html by 一念天堂
[2]http://www.aiseminar.cn/bbs/forum.php?mod=viewthread&tid=1664 by jink2005
[3]http://www.cnblogs.com/Frandy/archive/2012/10/20/llvm_clang_libcxx_cxx11.html by Frandy.CH
linux环境c++开发:ubuntu12.04使用llvm3.4.2的更多相关文章
- iTOP-4418开发板Android 5.1/4.4丨Linux + Qt5.7丨Ubuntu12.04系统
核心板参数 尺寸:50mm*60mm 高度:核心板连接器组合高度1.5mm PCB层数:6层PCB沉金设计 4418 CPU:ARM Cortex-A9 四核 S5P4418处理器 1.4GHz 68 ...
- linux内核升级(ubuntu12.04从3.13.0升级到3.4.0 )
花了一天的时间,终于把ubuntu12.04 的linux内核版本从3.13.0升级到3.4.0 升级后,系统更加稳定.具体步骤:# wget http://www.kernel.org/pub/li ...
- 在桌面Linux环境下开发图形界面程序的方案对比
在Linux下开发GUI程序的方法有很多,比如Gnome桌面使用GTK+作为默认的图形界面库,KDE桌面使用Qt作为默认的图形界面库,wxWidgets则是另一个使用广泛的图形库,此外使用Java中的 ...
- [置顶] PHP调用move_uploaded_file()提示 failed to open stream: Permission denied(Linxux环境,以Ubuntu12.04为例)
在使用PHP上传文件之后,我们有时候还需要移动到特定的文件夹,这时候就要调用move_uploaded_file()函数,可是会出现如下错误: Warning: move_uploaded_file( ...
- How to deploy openbr on linux server very shorly---- linuxmint13/ubuntu12.04 AMD64/debian7
SO FAST ON A SERVER!!!! There are serveral packages that you have to install: 1. openbr 0.6.0 packag ...
- Linux--U盘安装Ubuntu12.04
前言 最近一直在研究Android内核驱动开发的相关事宜,使用VMware虚拟机虽然可以更方便的开发,但是对于开发环境硬件的要求还是比较高的,若用于开发,效率太低了,所以考虑使用单独PC去装载Linu ...
- Linux--U盘安装Ubuntu12.04[转]
http://www.cnblogs.com/plokmju/p/linux_installubuntu.html 最近一直在研究Android内核驱动开发的相关事宜,使用VMware虚拟机虽然可以更 ...
- Linux环境下使用gcc编译,gdb反汇编C语言程序
使用虚拟机 VMware Workstation 10 Linux环境:Ubuntu 14.04 LTS Server amd64 我把过程截图如下. 首先是hello world程序: 备注: ...
- 4.1. 如何在Windows环境下开发Python
4.1. 如何在Windows环境下开发Python 4.1. 如何在Windows环境下开发Python 4.1.1. Python的最原始的开发方式是什么样的 4.1.1.1. 找个文本编辑器,新 ...
随机推荐
- hdu1695:数论+容斥
题目大意: 求x属于[1,b]和 y属于[1,d]的 gcd(x,y)=k 的方案数 题解: 观察发现 gcd()=k 不好处理,想到将x=x/k,y=y/k 后 gcd(x,y)=1.. 即问题转化 ...
- hdu4641-K-string(后缀自动机)
Problem Description Given a string S. K-string is the sub-string of S and it appear in the S at leas ...
- poj 2718 Smallest Difference(穷竭搜索dfs)
Description Given a number of distinct , the integer may not start with the digit . For example, , , ...
- MVC 区域模块
mvc4.0新增的area区域机制,可以协助你在架构较为大型的项目,让独立性较高的部分功能独立成一个MVC子网站,以降低网站与网站之间的耦合性,也可以通过area的切割,让多人同时开发同一个项目时候, ...
- WebGIS在行业中应用的演变
结合我本身的项目及WebGIS在公检法行业中的应用,对此作了一个演变过程的总结: 第一阶段:GIS基本功能的应用:Data Show(数据展示):Search(搜索):Search b ...
- 设计模式之Application Programs and Toolkits
Application Programs 应用程序 If you're building an application programsuch as a document editor or spre ...
- mysql高可用方案MHA介绍
mysql高可用方案MHA介绍 概述 MHA是一位日本MySQL大牛用Perl写的一套MySQL故障切换方案,来保证数据库系统的高可用.在宕机的时间内(通常10-30秒内),完成故障切换,部署MHA, ...
- .NET基础拾遗(3)字符串、集合和流3
三.流和序列化 3.1 流概念及.NET中常见流 无论什么信息,文字,声音,图像,只要进入了计算机就都被转化为数字,以数字方式运算.存储.由于计算机中使用二进制运算,因此数字只有两个:0 与 1,就是 ...
- 使用堆栈结构进行字符串表达式("7*2-5*3-3+6/3")的计算
问题: 给定字符串String str = "7*2-5*3-3+6/3", 求出字符串里面表达式的结果? 像javascript有自带的eval()方法,可以直接计算.但java ...
- sql获取第n条数据
select * from (select top n * from students) aa where not exists(select * from (select top n-1 * fro ...