官网thrift-0.18.1.tar.gz下载链接
主要流程根据源码中readme以及部分博客糅合而成
一、报错libtool: Version mismatch error. This is libtool 2.4.6, but the libtool: definition of this LT_INIT comes from libtool 2.4.2.
问题: 当前libtool 版本不够高
解决:
wget http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz
tar -zxf libtool-2.4.6.tar.gz
cd libtool-2.4.6
./configure --prefix=/usr
make
make install
ldconfig
问题:如果还是不行
解决:
autoreconf -fiv
二、出现gcc/g++版本不够高 可能需要满足stdc++11/14/17
问题:如果yum出现没找到源等问题 请看问题三
解决:
# 安装scl
yum -y install centos-release-scl
# 安装gcc
yum -y install devtoolset-7-gcc devtoolset-7-gcc-c++ devtoolset-7-binutils
#启动gcc7
scl enable devtoolset-7 bash
# 如果想安装其他版本的gcc/g++,只需要将数字替换即可实现
gcc -v
g++ -v
但是上述操作需要 每新开一个终端重新启动gcc 不然还会使同默认gcc
可使用如下操作
vim ~/.bash_profile
# 打开文件之后在文件内添加如下内容
# 添加在这个文件里的意思是每次启动会话都执行这个scl命令
scl enable devtoolset-7 bash
三、yum找不到源
问题:CentOS 更新yum源
解决:
1、做好备份,为了更新失败时切换回去
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
有多个时通过下面命令备份
mv /etc/yum.repos.d/CentOS* /etc/yum.repos.d/CentOS-Base.repo.backup
2、进入yum源配置文件夹
cd /etc/yum.repos.d/
3、根据centos版本下载对应的新源
这里以CentOS7为例
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
如果wget命令不生效,说明还没有安装wget工具,输入yum -y install wget 回车进行安装,或者使用
curl -O http://mirrors.aliyun.com/repo/Centos-7.repo
4、yum makecache 生成缓存,会把新下载CentOS-Base.repo源生效。
更新时会报某个aliyun timeout,他会自动尝试阿里其他镜像,最后自己会用基础镜像,然后自动更新一部分。因为基础镜像过时了。
以下非必要
5、执行yum源更新命令
yum clean all
yum makecache
yum -y update
//试试更新系统 yum -y update (不是root的加 sudo),这回可以顺利安装docker或更新系统了。
四、缺少event头文件,去libevent官网重新下载libevent安装
解决:
wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
tar -zxvf libevent-2.1.8-stable.tar.gz
cd libevent-2.1.8-stable
./configure --prefix=/usr/local
make
make install
五、/xxxx/xxx/libboost_unit_test_framework.a: No such file or directory
解决:先查找文件 find / -name libboost_unit_test_framework.a,比如在 /usr/local/lib/libboost_unit_test_framework.a,然后修改软连接到/xxxx/xxx/libboost_unit_test_framework.a 我的是/libboost_unit_test_framework.a
ln -s /usr/local/lib/libboost_unit_test_framework.a /libboost_unit_test_framework.a
如果没有libboost_unit_test_framework .a 就先
yum install libboost-all-dev
六、编译时 在函数xxxx对‘apache::thrift::transport::xxxxxxxxx未定义的引用
问题:最大的坑!!! 可能是我之前没安装完毕thrift 就把thrift的一些库导入到lib或者lib64里面了 导致这些函数使用调用混乱
解决:先根据报错 找到一些lib 或者干脆直接把一些和thrift有关的lib直接全部删掉 然后在编译的时候加上 -I -L 指向相关位置 我的位置是安装thrift目录的如下目录
注意:编译前一定要打开g++新版本 前面有提到!不然就报错
g++ *.cpp -o client -lthrift -I/root/thrift-0.18.1/lib/cpp/src -L/rootift-0.18.1/lib/cpp/.libs
七、编译完毕运行服务器客户端时会出现: error while loading shared libraries: libthrift-0.18.1.so: cannot open shared object file: No such file or directory
问题:./server 时又找不到动态库了 因为在问题六你把这些删掉了 用-L指向 但运行又没办法指向
解决:建立个软链接吧 先find到报错的库find / -name xxxxx 在建立链接
(应该要指向lib64 如果还是报错就lib试试)
ln -s /root/thrift-0.18.1/lib/cpp/.libs/libthrift-0.18.1.so /usr/lib64/libthrift-0.18.1.so
八、问题六和问题七是冲突的 即建立完毕软链接之后 在编译就会出错
问题:还不太懂 但是我能做到的就是 去lib或者lib64目录下删除掉libthrift-0.18.1.so然后再编译 然后再在lib或者lib64加上libthrift-0.18.1.so在进行运行
问题2:尼玛 又试了一下 冲突又不存在了 逆天的Linux 暂时忽略问题八
Centos安装Thrift步骤以及实例_bit.!的博客-CSDN博客