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