安装环境:
ubuntu-11.10(该版本在VMware7.0下可以成功安装VMware tools,但ubuntu-12.04不行)安装过程:
解压vine-1.0.tar.gz后进入文件vine-1.0,在其doc目录下有文件install-vine-release.sh,提供了所有安装命令,
先是安装编译vine需要的各种软件,然后./configure和make(系统默认gcc版本为gcc-4.6.1)
但执行到sudo make会出现下面错误
In file included from./disasm/asm_program.cpp:16:0:
/usr/include/libiberty.h:106:36: error: newdeclaration ‘char* basename(const char*)’
/usr/include/string.h:603:28: error:ambiguates old declaration ‘const char* basename(const char*)’
......
编辑文件libasmir/src/disasm/asm_program.cpp,在#include"libiberty.h"前添加:
#define HAVE_DECL_BASENAME 1
再次sudo make,又出现新的错误:
./vex/irtoir-i386.cpp: In function‘std::string reg_offset_to_name(int)’:
./vex/irtoir-i386.cpp:269:14: error: a castto a type other than an integral or enumeration type cannot appear in aconstant-expression
……
这其实是offsetof宏定义有问题,offset用于计算结构体成员在该结构体中的偏移,看了下vine的定义也没啥问题。
索性在头文件libvex_basictypes.h使用offset的代码前面添加:
#include <stddef.h>
用系统的offsetof定义取代vine的定义
(grep –rl offsetof ~/vine-1.0 可以查找所有含offsetof的文件)
再次sudo make就可以通过了(时间会有点长)。
这里给出一个已编译好的版本供下载。