TFS编译

来源:互联网 发布:淘宝促销商品关键词 编辑:程序博客网 时间:2024/05/18 18:00

我是64位UBUNTU,gcc 4.7,官方说是要4.1.2. 但不知道怎么回事,我就硬是没有在机子上装成功GCC4.1.2,只好硬着头皮再GCC 4.7上继续了。

安装libuuid-develzlib-develmysql-devel三个开发包。

 

ubuntu 上 mysql-devel 库的名字叫 libmysqld-dev,别弄错了

sudo apt-get install libmysqld-dev

浪费了几天的时间想安装zlib-dev 原来是因为UBUNTU下包名变了

sudo apt-get install zlib-dev 变为 sudo apt-get install zlib1g-dev

安装libuuid-devel,apt-get install e2fsprogs

安装tb-common-utils

在/etc/profile中加入

TBLIB_ROOT=****

export TBLIB_ROOT

./configure --prefix /home/zhy/softeware/tfsi

抱readline错误

  • 解决方法,安装apt-get install libreadline-dev

 

抱tcmalloc错误

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查看是否安装成功

make 时候报错 首先第一个错误就是各种类型转换报错。同时后面还跟了个 [-Werror=conversion]

猜测是GCC编译时候警告错误,

解决方法:于是就在configure.ac和Makfile.am文件中把CFLAGS的werror选项去掉。

重新configure成功。

 

 make时候 uuid.h相关错误:

安装uuid-dev失败

注意在安装uuid-dev的时候不同系统安装的名称不一样,使用centeros的同学需要安装yum install libuuid-devel,ubuntu的同学可以直接安装apt-get install uuid-dev

 

同样是make时候 报错 session_util.cpp 和session_util.h中SessionUtil::gene_session_id函数不匹配,

查看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>。

 

make 错误 'uint64_t* {aka long long unsigned int*}' to 'uLongf* {

找到对应文件,加强制类型转换;我报错文件是 src/new_client/tfs_meta_helper.cpp 281行

make错误atomic_inc参数类型错误,uint32_t uint64_t.

vim src/nameserver/client_request_server.cpp 的725,722行,我还是用的强制转换

ns_define.cpp:196:70: 错误: 对‘atomic_inc(uint64_t*)’的调用没有匹配的函数

还是强制转换

还是make时候  报错 /usr/bin/ld: cannot find -ljemalloc

解决方法:安装apt-get install libjemalloc-dev

还是make怎么这么多错误,

undefined reference to `uuid_generate‘  

undefined reference to `uuid_unparse'

 

  •  undefined reference to `uncompress'
  • 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

提示没有curses.h文件

安装sudo apt-get install  libncurses5-dev


0 0
原创粉丝点击