Linux/Cent OS 6.5 编译,安装obfuscator-llvm-3.6.1

o-llvm是基于llvm的代码混淆工具,当前(2015)最新版本是3.6.1,
git地址:https://github.com/obfuscator-llvm/obfuscator/tree/llvm-3.6.1
 

注意事项:
不要在/mnt/hgfs/目录下编译,不但慢,还会出很多问题
 
 

S

tep. 1 安装依赖

http://blog.csdn.net/linking530/article/details/43852789 (Centos 6.x 下编译Skynet 需要安装的依赖)
           # yum install autoconf
           # yum install libtermcap-devel ncurses-devel libevent-devel readline-devel
 
 
 

 

Step. 2 安装Lua5.3

 
 

 1、安装libreadline 库: 

 # sudo yum install readline-devel.i686

       

 2、下载源码

 # wget http://www.lua.org/ftp/lua-5.3.1.tar.gz

 # tar -xzvf lua-5.3.1.tar.gz

 

  3、编译

  # cd lua-5.3.1

  # make linux

 

  # sudo cp src/lua /usr/bin

  # sudo cp src/luac /usr/bin

 

  4. 拷贝头文件到include目录

  # cp lua-5.3.1/src/*.h /usr/include/

 

 


Step.3 升级Python到2.7

 
原文链接: http://www.aiplaypc.com/31.html 
 

centos6.5的python版本默认是2.6.6,可能有的时候我们需要升级到更高的版本,那就来动手升级下吧。我这里以2.7.8版本为例,根据实际需要选择升级版本即可。

yum install -y gcc gcc-c++ make readline-devel wget
wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz

安装

tar zxvf Python-2.7.8.tgz
cd Python-2.7.8
./configure --prefix=/usr/local/python27
make && make install

一路下来没有报错,可以试试以下命令

/usr/local/python27/bin/python2.7 -V

如果看到输出python2.7.8,就说明安装成功了

配置

创建一个链接来使系统默认python变为python2.7

ln -fs /usr/local/python27/bin/python2.7 /usr/bin/python

接下来修改/usr/bin/yum文件,不然yum会用不了,只需将将第一行的
#!/usr/bin/python
改成
#!/usr/bin/python2.6

到此升级python完毕。

 
Tips: 因为系统有很多软件会依赖python2.6,所以升到2.7后会导致很多软件不能用,这里只改了yum的,其他的如果不能正常工作,也要修改为引用py26,
不过BAT服务端只改这个就行了。
 
 
 

Step. 4 gcc升级到4.8.2(或更高,会用到C++11)

 
 
 

1.1 获取安装包并解压

wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.bz2
tar -jxvf gcc-4.8.2.tar.bz2

当然,http://ftp.gnu.org/gnu/gcc  里面有所有的gcc版本供下载,最新版本已经有4.9.2啦.

1.2 下载供编译需求的依赖项

参考文献[1]中说:这个神奇的脚本文件会帮我们下载、配置、安装依赖库,可以节约我们大量的时间和精力。

cd gcc-4.8.0 
./contrib/download_prerequisites 
上面这个脚本主要是安装gmp,mpfr,mpc的,如果安装失败可以参考下面1.4里的sina blog那个链接手动安装(非常繁琐)
别放到/mnt/hgfs/里面一般不会失败。

1.3 建立一个目录供编译出的文件存放

mkdirgcc-build-4.8.2
cd gcc-build-4.8.2

1.4 生成Makefile文件

../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib

我在这一步报错了:
Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.
参考这个链接解决:
 
# wget ftp://ftp.gnu.org/gnu/gmp/gmp-5.0.1.tar.bz2
# wget ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.2.tar.gz
 
# tar -jxf gmp-5.0.1.tar.bz2
# tar -xf mpfr-3.1.3.tar.xz
# tar -xf mpc-1.0.2.tar.gz
 
...
后续操作参考上面的Blog, 使用的版本跟作者提供的不一样,写命令的时候注意,装完后再去gcc的build目录执行configure
# ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-3.1.3 --with-mpc=/usr/local/mpc-1.0.2
 
 
 

1.5 编译(注意:此步骤非常耗时)

先装cpp编译器
yum install -y gcc-c++

再编译
make -j4

-j4选项是make对多核处理器的优化,如果不成功请使用 make,相关优化选项可以移步至参考文献[2]。

 

====================会有可能遇到几个错误=========================

Error 1

我在安装此步骤时候出错,错误描述:

 
compilation terminated.
make[5]: *** [_gcov_merge_add.o] 错误 1make[5]: Leaving directory `/home/imdb/gcc-4.8.2/gcc-build-4.8.2/x86_64-unknown-linux-gnu/32/libgcc'
make[4]: *** [multi-do] 错误 1make[4]: Leaving directory `/home/imdb/gcc-4.8.2/gcc-build-4.8.2/x86_64-unknown-linux-gnu/libgcc'
make[3]: *** [all-multi] 错误 2make[3]: *** 正在等待未完成的任务....
make[3]: Leaving directory `/home/imdb/gcc-4.8.2/gcc-build-4.8.2/x86_64-unknown-linux-gnu/libgcc'
make[2]: *** [all-stage1-target-libgcc] 错误 2make[2]: Leaving directory `/home/imdb/gcc-4.8.2/gcc-build-4.8.2'
make[1]: *** [stage1-bubble] 错误 2make[1]: Leaving directory `/home/imdb/gcc-4.8.2/gcc-build-4.8.2'
make: *** [all] 错误 2
 

大概看看,错误集中在 x86_64unknown-linux-gnu/32/libgcc 和 x86_64-unknown-linux-gnu/libgcc

根据参考文献[3],安装如下两个软件包(仅用于CentOS6.X):

sudo yum -y install glibc-devel.i686 glibc-devel

Error 2
configure: error: cannot compute suffix of object files: cannot compile, 则执行下面这条命令(路径根据自己的改):
# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc-1.0.2/lib:/usr/local/gmp-5.0.1/lib:/usr/local/mpfr-3.1.3/lib
 
========================Error end==================================

过程中CPU基本满载:

1.6、安装

sudo make install

zy: 这个地方 make install后,编译出来的libstdc++.so.6.0.18被拷贝到了 /usr/local/lib64 目录内,而且/usr/lib64内的链接也没有
改,所以编译时会报错:/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found 
这里参考下面这个帖子解决:http://m.blog.csdn.net/blog/u012317833/25076147
# cp /usr/local/lib64/libstdc++.so.6.0.18 /usr/lib64
# ln -sf /usr/lib64/libstdc++.so.6.0.18 /usr/lib/libstdc++.so.6
# ldconfig

 

二、验证安装

重启,然后查看gcc版本:

gcc -v

尝试写一个C++11特性的程序段 tryCpp11.cc,使用了shared_ptr

 
 1//tryCpp11.cc 2 #include <iostream>
 3 #include <memory>
 4 5int main()
 6 {
 7     std::shared_ptr<int> pInt(newint(5));
 8     std::cout << *pInt << std::endl;
 9return0;
10 }
 

验证文件:

g++ -std=c++11 -o tryCpp11 tryCpp11.cc
./tryCpp11

Linux升级GCC 4.8.1清晰简明教程(Ubuntu 12.04 64位版为例)  http://www.linuxidc.com/Linux/2014-04/99583.htm

在CentOS 6.4中编译安装GCC 4.8.1 + GDB 7.6.1 + Eclipse 在CentOS 6.4中编译安装GCC 4.8.1 + GDB 7.6.1 + Eclipse

Ubuntu下Vim+GCC+GDB安装及使用 http://www.linuxidc.com/Linux/2013-01/78159.htm

Ubuntu下两个GCC版本切换 http://www.linuxidc.com/Linux/2012-10/72284.htm

GCC 的详细介绍请点这里
GCC 的下载地址请点这里

更多CentOS相关信息见CentOS 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=14

本文永久更新链接地址http://www.linuxidc.com/Linux/2015-01/112595.htm

 
 

Step.5  下载o-llvm 代码
# git clone https://github.com/obfuscator-llvm/obfuscator.git
 
或者下载zip包: https://github.com/obfuscator-llvm/obfuscator/tree/llvm-3.6.1
 
 
 

Step.6 编译o-llvm

官方文档,写的很详细。

这里我写个简单的,假如o-llvm的代码下载在 obfuscator-llvm-3.6.1 文件夹内
# cd obfuscator-llvm-3.6.1
# mkdir build
# cd build
# ../configure
 
if no errors then
# make -j4
耗时极长,4核2G内存,编了几个小时
 
 

Step.7 安装o-llvm
 
在第6步的目录内执行
# make install-clang
# make install-libs
 
 
 
验证安装是否成功:
clang -v
 
 
 

end
 
 
 

posted on 2015-11-24 21:21  Gneveek  阅读(1206)  评论(0编辑  收藏  举报

导航