Centos安装Thrift c++踩坑记录

官网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

解决libtool版本不匹配

五、/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博客

Thrift安装总结_mummyFly的博客-CSDN博客

CentOS 更新yum源及yum命令详解_centos更新yum源_wade3015的博客-CSDN博客

Thrift安装总结_mummyFly的博客-CSDN博客

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值