llvm是一个新开源的编译器,笔者因为工作关系,尝试使用了一下llvm,现在将llvm编译说明总结如下:


官方的llvm的说明如下网页,主要使用的指令是


https://github.com/obfuscator-llvm/obfuscator/wiki/Installation


$ git clone -b llvm-3.4 https://github.com/obfuscator-llvm/obfuscator.git
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE:String=Release ../obfuscator/
$ make -j5


其中这里需要注意一点 cmake的版本要在 2.8以上,而我测试的机器是 


Red Hat Enterprise Linux Server release 6.2 (Santiago)

里面自带的yum 升级cmake 只能到 2.6 这点和ubuntu apt-get 差异还是很大


放弃了用yum源升级后,就需要直接编译cmake源码的方式来安装cmake了



1  编译cmake


下载地址 

http://www.cmake.org/download/


我下载的是 Previous Release (2.8.12.2) 这个版本


下载完成后

[root@zck]# cd /usr/local
[root@zck]# tar -zxv -f cmake-2.8.10.2.tar.gz // 解压压缩包
[root@zck]# rm -rf cmake-2.8.12.2.tar.gz // 删除压缩包
[root@zck]# cd cmake-2.8.12.2
[root@localhost cmake-2.8.12.2]# ./configure
[root@localhost cmake-2.8.12.2]# make
[root@localhost cmake-2.8.12.2]# make install
[root@zck]# mv cmake-2.8.10.2 cmake // 修改文件夹名


这些命令,还好挺顺利的,一切良好


然后再通过

PATH=/usr/local/cmake/bin:$PATH

export PATH

这样的指令 将cmake给安装到系统中,终于搞定了cmake



2   编译 llvm


$ git clone -b llvm-3.4 https://github.com/obfuscator-llvm/obfuscator.git
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE:String=Release ../obfuscator/


这几条指令执行顺利,


但是执行到最后一条 make -j5的时候各种出错。


后来看了一下系统的 gcc,竟然是 4.4.6的版本,后来尝试了用 make 不加多核编译的选项

竟然能够慢吞吞的进行编译了,但是并不顺利,编译到百分之70多的时候,还是出错了,

看来只能升级 gcc了



3 编译gcc-4.7.2


参考链接

http://blog.sina.com.cn/s/blog_a2ef07450101lo1h.html



首先从 https://gcc.gnu.org/install/download.html

官网找到一个镜像下载了 gcc的tar包,上传到服务器上,解压缩后,首先运行


./contrib/download_prerequisites

下载依赖的库文件


中间出现了一个 

wget: unable to resolve host address的错误

解决办法:


登入root(VPS)。

进入/etc/resolv.conf。

修改内容为下

nameserver 8.8.8.8 #google域名服务器

nameserver 8.8.4.4 #google域名服务器


根据gcc编译说明,需要在gcc源文件的目录下建好一个目录用于编译gcc代码


建好目录后,进入目录运行 configure文件


配置选项为

../configure --prefix=/usr/local/gcc-4.7.2  --enable-languages=c,c++

表示只选择 c和c++两种语言

同时指定 make install 的路径是 /usr/local/gcc-4.7.2 这个路径


    make -j4 开始编译

    一会儿就出现了

    Error “gnu/stubs-32.h: No such file or directory” while compiling Nachos source code

    

    yum install glibc-devel.i686  修改之

    

    继续编译


经过漫长的时间编译完成以后,gcc终于编译完成了,然后使用

sudo make install 命令

在/usr/local/gcc-4.7.2 下面将gcc安装成功。


4 再次编译 llvm

首先需要重新cmake一下,这次cmake需要指定编译器,要指定刚刚安装的gcc-4.7 这个编译器


cmake -DCMAKE_BUILD_TYPE:String=Release -DCMAKE_C_COMPILER=/usr/local/gcc-4.7.2/bin/gcc  -DCMAKE_CXX_COMPILER=/usr/local/gcc-4.7.2/bin/g++ ../obfuscator/

用上面的那个命令,将obfuscate


cmake的相关选项


CMAKE_C_COMPILER:指定C编译器

CMAKE_CXX_COMPILER:

CMAKE_C_FLAGS:编译C文件时的选项,如-g;也可以通过add_definitions添加编译选项

EXECUTABLE_OUTPUT_PATH:可执行文件的存放路径

LIBRARY_OUTPUT_PATH:库文件路径

CMAKE_BUILD_TYPE::build 类型(Debug, Release, ...),CMAKE_BUILD_TYPE=Debug

BUILD_SHARED_LIBS:Switch between shared and static libraries


example

set(CMAKE_C_COMPILER "/usr/bin/gcc-4.7")



5  运行 clang-3.4

运行clang-3.4 发现依然出现了错误,说是缺少一个g++的lib库,


/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found


这个时候我们已经有了

编译好的gcc-4.7,只需要设置一下环境变量 LD_LIBRARY_PATH 即可,设置完成以后,再次

运行 clang ,运行正常


环境变量设置 LD_LIBRARY_PATH


LD_LIBRARY_PATH=/usr/local/gcc-4.7.2/lib64/

export LD_LIBRARY_PATH

echo $LD_LIBRARY_PATH

LD_LIBRARY_PATH=

export LD_LIBRARY_PATH