我是64位UBUNTU,gcc 4.7,官方说是要4.1.2. 但不知道怎么回事,我就硬是没有在机子上装成功GCC4.1.2,只好硬着头皮再GCC 4.7上继续了。
安装libuuid-devel,zlib-devel,mysql-devel三个开发包。
sudo apt-get install libmysqld-dev
sudo apt-get install zlib-dev 变为 sudo apt-get install zlib1g-dev
安装tb-common-utils
在/etc/profile中加入
TBLIB_ROOT=****
export
TBLIB_ROOT
./configure --prefix /home/zhy/softeware/tfsi
configure: error:
in
`/home/zhy/softeware/tfs':
configure: error: tcmalloc link failed (--without-tcmalloc to disable)
|
解决方法:因为我事64位的,查到说要装其他东西
64位操作系统请先安装libunwind库,32位操作系统不要安装。libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。
apt-get install libunwind8
apt-get install libunwind8-dev 我装的时候用cache搜出来是带8
安装google-perftools的时候,几次都没成功,不知道装那个,搜出来好几个,于是我就用下面的全装。
apt-get install libgoogle-perftools*
apt-get install google-perftools
可用lsof -n |grep tcmalloc查看是否安装成功
猜测是GCC编译时候警告错误,
解决方法:于是就在configure.ac和Makfile.am文件中把CFLAGS的werror选项去掉。
重新configure成功。
安装uuid-dev失败
注意在安装uuid-dev的时候不同系统安装的名称不一样,使用centeros的同学需要安装yum install libuuid-devel,ubuntu的同学可以直接安装apt-get install uuid-dev
查看session_util.h中本来定义的int32却变成了int.
不知道为什么,猜测是GCC编译的时候做了什么事情,于是就把configure文件中的GCC选项cflags的内容全去掉。重新configure,后来居然报错:在session_util.h找不到变量int32的定义,但为什么session_util.cpp又能成功呢?
解决方法:在session_util.h中(加入 #include<tbsys.h> #include<stdlib.h>。
找到对应文件,加强制类型转换;我报错文件是 src/new_client/tfs_meta_helper.cpp 281行
vim src/nameserver/client_request_server.cpp 的725,722行,我还是用的强制转换
还是强制转换
解决方法:安装apt-get install libjemalloc-dev
undefined reference to `uuid_generate‘
undefined reference to `uuid_unparse'
到 src/tools/nameserver中修改Makefile
267行 LIBS = -lmysqlclient -lrt -lpthread -lm -ldl -lc 加 -lz -luuid
277行 MYSQL_LDFLAGS = -L/usr/lib/i386-linux-gnu -lmysqlclient_r -lpthread -lz -lm -lrt -ldl 加 -luuid
安装sudo apt-get install libncurses5-dev