文档章节

centos 6.5(centos7)下安装thrift 0.9.1详细教程

双月通天
 双月通天
发布于 2015/12/29 11:16
字数 2054
阅读 2467
收藏 1
点赞 0
评论 3

进行Thrift的最小化安装,在Centos 6.5 上下面的步骤必不可少. 我们给出从源代码编译Thrift的例子。这些介绍对Thrift0.9.2 的 releases版本同样有效。

更新系统

sudo yum -y update         (系统会被升级为6.7)

 

安装平台开发工具

sudo yum -y groupinstall "Development Tools"   (这一步不一定成功,但是不影响后面)

 

升级autoconf/automake/bison

sudo yum install -y wget

 

升级 autoconf

wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
tar xvf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure --prefix=/usr
make
sudo make install
cd ..

 

升级 automake

wget http://ftp.gnu.org/gnu/automake/automake-1.14.tar.gz
tar xvf automake-1.14.tar.gz
cd automake-1.14
./configure --prefix=/usr
make
sudo make install
cd ..

 

升级 bison

wget http://ftp.gnu.org/gnu/bison/bison-2.5.1.tar.gz
tar xvf bison-2.5.1.tar.gz
cd bison-2.5.1
./configure --prefix=/usr
make
sudo make install
cd ..

 

添加添加可选的c++语言库依赖库

所有语言都要用到Apache的Thrift 的IDL编译器,从这点看IDL编译器需要的一切都要安装。 (如何你只需要安装编译器可跳过此节).

如果你要使用C++开发Thrift的客户端/服务器,你还需要编译支持C++共享库的可选包。

安装C++依赖库

sudo yum -y install libevent-devel zlib-devel openssl-devel

 

升级 Boost

wget http://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.tar.gz
tar xvf boost_1_55_0.tar.gz
cd boost_1_55_0./bootstrap.sh
sudo ./b2 install

 

安装thrift-0.9.1

 wget http://mirrors.cnnic.cn/apache/thrift/0.9.1/thrift-0.9.1.tar.gz
 tar -zxvf thrift-0.9.1.tar.gz
 cd thrift-0.9.1
./configure –-prefix=/your/program/path/ --enable-libtool-lock
 (--prefix后面的值是你要将程序安装到哪个目录,如果不写,默认安装到/usr/local下面,我的是--prefix=/home/thrift)
make
make install

 

安装成功之后,我们进入我们的thrift的安装路径,你会看到thrift其实包含了三部分:一个bin程序、一堆头文件和若干库文件:

我们进入bin目录,执行./thrift  --version, 就表示我们安装成功了

但是我们只能在这个目录下面执行thrift命令,如果我们想在任何目录下执行thrift --version的相关命令,我们可以将我们的bin目录下的thrift文件拷贝到/usr/local/bin下面,然后执行.  /etc/profile(加载到环境变量)就可以了

这个目录下面的可执行文件,都可以用命令执行

任何目录可以执行这个命令

至此我们的thrift-0.9.1安装成功了!

 

--------------------------------------------更新于2016年7月27日-----------------------------------------------------------------------------

由于公司的编译系统环境变了,变成了到centos7上面(centos7.0 ,7.1,7.2都可以)所以以前在centos6.5上面编译的thrift的动态库,拿到centos7.1上面连接到我的程序里面就出错了,错误如下:

./../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_CTX_free'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `X509_NAME_get_index_by_NID'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `BIO_ctrl'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `CRYPTO_set_locking_callback'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_CTX_set_default_passwd_cb_userdata'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `RAND_poll'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `ERR_free_strings'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `CRYPTO_num_locks'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_get_error'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `sk_value'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `ASN1_STRING_to_UTF8'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `ASN1_STRING_data'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_get_peer_certificate'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_CTX_set_default_passwd_cb'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `ASN1_STRING_length'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `X509_get_ext_d2i'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_CTX_load_verify_locations'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_CTX_set_cipher_list'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `X509_get_subject_name'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `X509_free'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `ERR_remove_state'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_library_init'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `CRYPTO_free'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `sk_pop_free'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `CRYPTO_set_id_callback'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_read'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_get_wbio'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_get_verify_result'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_get_verify_mode'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `X509_NAME_get_entry'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `X509_NAME_ENTRY_get_data'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_accept'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `CRYPTO_set_dynlock_destroy_callback'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_peek'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `CRYPTO_set_dynlock_lock_callback'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_shutdown'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_CTX_set_verify'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `CRYPTO_cleanup_all_ex_data'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `ERR_peek_error'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `X509_verify_cert_error_string'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_CTX_new'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `TLSv1_method'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `EVP_cleanup'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `sk_num'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `ERR_reason_error_string'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_CTX_use_certificate_chain_file'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_connect'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `ERR_clear_error'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_load_error_strings'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_free'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_write'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_set_fd'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `CRYPTO_set_dynlock_create_callback'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_CTX_use_PrivateKey_file'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_CTX_ctrl'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `GENERAL_NAME_free'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `ERR_get_error'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_new'
../../../module/thirdparty/thrift-0.9.1/lib/linux/libthrift.so: undefined reference to `SSL_get_shutdown'
collect2: error: ld returned 1 exit status
make: *** [nodemanager] Error 1

解决办法,将thrift库拿到centos7的系统上面重新编译,用生成的新库链接到我的程序中,就可以解决,其实就可以安装上面的步骤在centos7的系统上面再做一次就可以了,但是现在不一样了,就是我的程序虽然跑在64位上面,但是是32位的程序,其链接的也必须是32位的库,所以我们thrift库要编译成32位的库,但是cenos7是64位系统,默认编译成64位程序,要想生成32位的程序,步骤如下

前面都不变,就在执行thrift的configure文件的时候加入一些编译选项,如下:

ERLCFLAGS="-m32" MONO_CFLAGS="-m32" GOBJECT_CFLAGS="-m32 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include" GLIB_CFLAGS="-m32 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include" QT_CFLAGS="-m32" CFLAGS="-m32" CXXFLAGS="-m32" LDFLAGS="-m32" ./configure --with-lua=no --prefix=/home/thrift

因为执行configure就是生成makefile,加这些编译选项就可以让其生成编译32位库的makefile.

但是因为是让其编译32位的程序,会检测32位的glibc库和一些32位的环境,我们准备好没有,如果没有的话,执行以上命令可能会出如下错误

这是因为没有32位的库环境,我们安装好32位的环境就可以编译,安装命令如下:

yum install -y libgcc.i686 glibc-devel.i686 libstdc++.i686 zlib.i686 zlib-devel.i686 libstdc++-devel.i686 glibc-static.i686

在执行上面一串configure命令,可能出现

再安装32位的openssl-devel

yum install openssl-devel.i686 

基本configure就可以成功。

但是如果这样,make编译的时候可能会出如下错误:

可以看得到其实我们是安装glib-2.0,但是没有这个头文件,我们从别的正常的机器上把glibconfig.h拷贝过来就可以了

scp -P2223 /usr/lib/glib-2.0/include/glibconfig.h 172.16.81.236:/usr/lib/glib-2.0/include/

然后这边在make,就会发现成功了,然后再make install,就可以去我们指定的地方找我们的库了。

configure还有一个地方值得我们注意,执行configure有很多命令可以供我们选择,像如果你不要编译erlang的thrift库,但是你的环境装了erlang环境,执行configure的时候,说erlang环境没有配置好,有如下错误:

checking for erl... /usr/local/bin/erl
checking for erlc... /usr/local/bin/erlc
checking for erlc... /usr/local/bin/erlc
checking for erl... /usr/local/bin/erl
checking for Erlang/OTP library base directory... configure: error: in `/home/buildthrift/thrift-0.9.1':
configure: error: test Erlang program execution failed
See `config.log' for more details

那我们在执行configure的时候去掉erlang。命令如下:

./configure  --prefix=/home/thrift  --without-erlang 

这样就可以成功。

 

其实如果我们只要cpp,可以如下:

./configure --with-cpp  --with-boost --without-python --without-csharp --without-java --without-erlang --without-perl --without-php --without-php_extension --without-ruby --without-haskell
 --without-go

这样就可以快很多。

© 著作权归作者所有

共有 人打赏支持
双月通天
粉丝 35
博文 166
码字总数 208088
作品 0
徐汇
程序员
加载中

评论(3)

摩云菜
摩云菜

引用来自“摩云菜”的评论

你走过的路,我要重新走一遍:sleepy:

引用来自“双月通天”的评论

什么板子上面的thrift要重新编译啊?
hdu5,arm平台,所以要重新编译一个arm平台的thrift,跟你之前的64位机器编译32位库,还不一样
双月通天
双月通天

引用来自“摩云菜”的评论

你走过的路,我要重新走一遍:sleepy:
什么板子上面的thrift要重新编译啊?
摩云菜
摩云菜
你走过的路,我要重新走一遍:sleepy:
Ubuntu14.04安装docker

Docker利用Linux容器(LXC)虚拟化技术提供一份部署环境。Docker目的是创建可移植,可分发给任何的Docker环境中运行。Docker由于是OpenVZ的作品,对内核有一些要求,不要在14.04版本的Ubuntu仓库...

魏香飞 ⋅ 2016/12/02 ⋅ 0

createrepo 建立本地YUM源的一些注意事项

网上有很建立本地YUM源的教程。一般来说步骤有以下几点。 1、先安装createrepo。一般光盘中有。 2、将光盘拷入一个目录,如果要分享给其他机器,可以拷入ftp或http的目录。 3、通过createrep...

boydreaming ⋅ 2016/02/28 ⋅ 0

VMware Workstation12 安装Redhat7/Centos7环境

说明: 在刘遄老师的《linux就该这么学》里,第1章 部署虚拟环境安装linux系统,很详细的给出了图文并茂的教程。初次安装虚拟机linux系统的朋友可以在那里很好的完成安装。 另外,Redhat7和C...

bestlope ⋅ 2017/10/28 ⋅ 0

李敏/Thrift Test of Java and Objective-C

Thrift Test of Java and Objective-C README涉及内容: MAC上安装Thrift 使用java和oc对thrift进行测试 目录结构: |-- TestMessage.thrift // thrift测试schema文件|-- gen-cocoa // 通过T......

李敏 ⋅ 2014/09/23 ⋅ 0

openstack glance模块安装问题

系统centos7 操作:yum install openstack-glance python-glance python-glanceclient 报错Error: Package: python-elasticsearch-1.4.0-2.fc22.noarch (resource) Requires: python-thrift......

clarkly1988 ⋅ 2016/03/06 ⋅ 0

U盘启动安装Linux

dd if=CentOS-6.5-x86_64-bin-DVD1.iso of=/dev/sdb 拷入iso镜像到Linux系统中,插入U盘,然后用上面的命令把iso文件写入U盘就能用U盘启动安装CentOS 6.5以上版本,6.5已经亲自测可用,CentO...

BuWStudio ⋅ 2014/08/06 ⋅ 1

docker 二.docker 安装

Docker 安装 一.Docker安装 1.1.1 docker 安装在RHEL/centos上 **推荐是rhel/centos 系统的版本必须大于 6.5 以上 6系列最好是6.6 运行docker较稳定,低于6.5以下安装docker 第一要升级内核...

786376668 ⋅ 2015/04/27 ⋅ 0

安装centos7出现问题

记录下安装centos7出现的问题: 1.新建完虚拟机后,启动画面没有 “install centos” 选项 解决:这是因为下载的文件有问题或者是和物理主机硬件不兼容,重新下载一个即可。 2.安装完后,启动...

你假松假精 ⋅ 2016/08/15 ⋅ 0

centos7系统下 docker 环境搭建

运行环境: VMware Workstation Pro 在虚拟机中安装centos7系统, 选择最小安装, 网络连接方式选择的桥接(与宿主机在同一IP段) centos7一定要安装64位, docker目前不支持32位内核 ##看准了, 是...

qq_33326449 ⋅ 03/20 ⋅ 0

CentOS 6.5系统安装配置图解教程(详细图文)

说明: 截止目前CentOS 6.x最新版本为CentOS 6.5,下面介绍CentOS 6.5的具体安装配置过程 服务器相关设置如下: 操作系统:CentOS 6.5 64位 IP地址:192.168.21.129 网关:192.168.21.2 DNS:...

luamas ⋅ 2014/02/22 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Sqoop

1.Sqoop: 《=》 SQL to Hadoop 背景 1)场景:数据在RDBMS中,我们如何使用Hive或者Hadoop来进行数据分析呢? 1) RDBMS ==> Hadoop(广义) 2) Hadoop ==> RDBMS 2)原来可以通过MapReduce I...

GordonNemo ⋅ 37分钟前 ⋅ 0

全量构建和增量构建的区别

1.全量构建每次更新时都需要更新整个数据集,增量构建只对需要更新的时间范围进行更新,所以计算量会较小。 2.全量构建查询时不需要合并不同Segment,增量构建查询时需要合并不同Segment的结...

无精疯 ⋅ 47分钟前 ⋅ 0

如何将S/4HANA系统存储的图片文件用Java程序保存到本地

我在S/4HANA的事务码MM02里为Material维护图片文件作为附件: 通过如下简单的ABAP代码即可将图片文件的二进制内容读取出来: REPORT zgos_api.DATA ls_appl_object TYPE gos_s_obj.DA...

JerryWang_SAP ⋅ 今天 ⋅ 0

云计算的选择悖论如何对待?

导读 人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云...

问题终结者 ⋅ 今天 ⋅ 0

637. Average of Levels in Binary Tree - LeetCode

Question 637. Average of Levels in Binary Tree Solution 思路:定义一个map,层数作为key,value保存每层的元素个数和所有元素的和,遍历这个树,把map里面填值,遍历结束后,再遍历这个map,把每...

yysue ⋅ 今天 ⋅ 0

IDEA配置和使用

版本控制 svn IDEA版本控制工具不能使用 VCS-->Enable Version Control Integration File-->Settings-->Plugins 搜索Subversion,勾选SVN和Git插件 删除.idea文件夹重新生成项目 安装SVN客户......

bithup ⋅ 今天 ⋅ 0

PE格式第三讲扩展,VA,RVA,FA的概念

作者:IBinary 出处:http://www.cnblogs.com/iBinary/ 版权所有,欢迎保留原文链接进行转载:) 一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边...

simpower ⋅ 今天 ⋅ 0

180623-SpringBoot之logback配置文件

SpringBoot配置logback 项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 logback.xml 配置文件即可,那么在SpringBoot中可以怎么做?...

小灰灰Blog ⋅ 今天 ⋅ 0

冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第...

人觉非常君 ⋅ 今天 ⋅ 0

Vagrant setup

安装软件 brew cask install virtualboxbrew cask install vagrant 创建project mkdir -p mst/vmcd mst/vmvagrant init hashicorp/precise64vagrant up hashicorp/precise64是一个box......

遥借东风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部