环境:ubuntu12.04 32 + llvm-3.2
目前的最新版本已到了3.7.0,尝试了这个版本,不过首先就需要cmake版本为2.8.12以上,我的os环境里默认的cmake安装版本2.8.7,因此还需要去手动下载cmake,想着可能还有别的依赖也是如此,就先放弃最新版本了。
编译过程:
作者:snsn1984
学习LLVM的过程是一个漫长而艰巨的过程,需要大量的时间和精力。不仅仅如此,开始的过程也不轻松。一个好的开始就是成功的一半。我结合了自己学习的过程,以及给别人推荐学习的过程,整理出了这个七天LLVM零基础入门的系列博客。主要的目标是让没有LLVM基础的人,经过这一系列的学习,可以完成一些Pass的工作,并且可以成功的自己去自主学习,知道自己该怎么学习,知道自己该去学些什么。如果你有什么建议,欢迎反馈,欢迎探讨。
第一步,要对LLVM有一个初步的印象
这里,http://llvm.org/ 是LLVM的官方网站,如果英语足够好,又有足够的耐心,从这里可以找到你想要的一切。
第二步,看看LLVM到底是什么
我们对LLVM有了一个初步的印象之后,我们还是不知道LLVM具体是什么,那么我们就来看一下。
从 http://llvm.org/releases/download.html#3.2 这里,选择Download LLVM 3.2(3.2是目前发布版本的最新版本,在这个页面也可以看到以前的历史版本)下的
LLVM source code
Clang source code
Compiler RT source code
这三项进行下载,下载后进行解压,解压后应该得到三个名字分别为llvm-3.2.src、clang-3.2.src、compiler-rt-3.2.src。这时候,需要对这三个文件夹进行重命名,llvm-3.2.src重命名可以根据自己习惯,此处推荐重命名为llvm-3.2;clang-3.2.src重命名为clang,并且将此文件夹整体放到llvm-3.2/tools下,包含clang这个顶层文件夹;compiler-rt-3.2.src重命名为compiler-rt,并且将包含顶层文件夹的整体文件夹放到llvm-3.2/projects/下。
此时,打开一个终端,切换到llvm-3.2目录下,依次输入如下命令:
mkdir build
cd build
cmake ../
make
然后就可以在llvm-3.2/build/bin目录下看到一大堆的可执行文件。(此处不使用make install是方便在系统上使用多版本的llvm进行研究和修改。)
这个时候可以运行如下命令,来看看clang:
./clang -v
./clang -help
可以写一个简单的helloworld程序,使用clang进行编译,使用方法和gcc相同:
./clang hello.c
./a.out
第三步:clang是什么
我们刚才编译出来了自己的LLVM,但是我们使用的确是clang。clang到底是什么,我们接下来就来看看:
Clang is an "LLVM native" C/C++/Objective-C compiler, which aims to deliver amazingly fast compiles (e.g. about3x faster than GCC when compiling Objective-C code in a debug configuration), extremely usefulerror and warning messages and to provide a platform for building great source level tools. TheClang Static Analyzer is a tool that automatically finds bugs in your code, and is a great example of the sort of tool that can be built using the Clang frontend as a library to parse C/C++ code.
这是官方对clang的简要介绍。
到这个时候,应该可以熟练的使用clang去编译自己的程序了。
出错记录及一些编译结果图示如下:
1.cmake
(1)CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
- apt-get install g++
(2)Could NOT find LibXml2 (missing: LIBXML2_LIBRARIES LIBXML2_INCLUDE_DIR)
- apt-get intall libxml2 libxml2-dev
(3)Could NOT find Subversion (missing: Subversion_SVN_EXECUTABLE)
- apt-get install subversion
2.make
(1)提示出错uint64_t在本平台没有定义,出错的源文件是build/include/llvm/Support/DataTypes.h
网上没找到相关解法,只说uint64_t需要typedef定义。点进源文件看一下,发现了几个声明以及注释,跟uint64_t有关。
32行处有两行注释,试着把这两个宏定义了,保存然后继续make就不再报错了,但是否有其他影响不清楚。
/* #undef HAVE_UINT64_T */
/* #undef HAVE_U_INT64_T */
#define HAVE_UINT64_T 1
#define HAVE_U_INT64_T 1
然后就静等编译进度到100%吧,这个过程要一段时间,编译结束就是这样了。
查看编译出来的build/bin目录以及clang版本。./clang xxx/hello.c生成的a.out默认在clang同一目录下。
Ubuntu编译安装llvm-clang:http://www.linuxdiyf.com/linux/14080.html