一、简介

1、语言库要求

因为thrift支持多语言。所以编译thrift源代码的过程中,会用到该语言的一些类库。如c++的boost、java的jdk等。

那么,在安装thrift过程中,须要对各种语言安装哪些类库和工具呢,官方对此有具体的介绍:

  1. 所需语言库和工具
  2. C++ Boost 1.33.1+ (必选),libevent (可选,用来创建非堵塞server) zlib (可选)
  3. Java :Java 1.5+ (必选),Apache Ant (必选),Apache Ivy(必选),Apache Commons Lang,SLF4J(必选)
  4. C#: Mono 1.2.4+ 或者 Visual Studio 2005+
  5. Python: 2.4+(必选)
  6. PHP: 5.0+(必选)
  7. Ruby: 1.8+(必选)
  8. Erlang: R12(必选)
  9. Perl 5: Bit::Vector ,Class::Accessor
  10. 以上的语言库是看你详细须要thrift生成如何的语言,并非必须所有都安装。

2、支持的操作系统

thrift支持windows和linux两种操作系统

未尝试windows下的安装(考虑到普遍性和高效率,不建议使用windows安装thrift),下面是网上搜到windows下安装方法:

http://wiki.apache.org/thrift/ThriftInstallationWin32

http://blog.csdn.net/snowbirdfly/article/details/6746392

linux下安装,本人尝试过centos4和centos5,因为centos5自带的一些开发包版本号较高,和thrift环境比較吻合。建议使用centos5.

以下開始在centos5下安装thrift。let’s begin 。

二、安装环境

  1. 操作系统:centos5版本号以上操作系统
  2. 网络:有独立ip,能訪问外网
  3. 远程连接软件:SecureCRT

三、安装步骤

1、安装jdk

centos5自带的jdk版本号是1.6.0,符合thrift安装要求,可能须要加入环境变量。

  1. 环境变量加入方法:
  2. vim /etc/profile
  3.  
  4. 此文件后面追加(路径因机而异):
  5. JAVA_HOME=/usr/share/jdk1.5.0_16
  6. CLASSPATH=./:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
  7. PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
  8. LD_LIBRARY_PATH=/usr/lib
  9. export PATH CLASSPATH JAVA_HOME LD_LIBRARY_PATH
  10.  
  11. 运行下面命令,使profile文件生效:
  12. source /etc/profile

验证方法:

  1. 输入java -versionjava版本号,须在1.5以上
  2. 输入javac,瞧见此命令的使用说明后。即验证jdk成功安装,否则,检查一下就哪个环节出了问题。

这个安装比較简单,不懂的地方能够參考: http://www.blogjava.net/esprit/archive/2006/01/18/28489.html

2、安装ant

  • 1、下载

http://ant.apache.org/bindownload.cgi 下载最新的tar包:apache-ant-1.8.3.tar.gz。

  • 2、安装

cd到/usr/local下,解压

  1. [root@bogon san1156]# tar zxpvf apache-ant-1.8.3.tar.gz
  2. [root@bogon san1156]# ln -s apache-ant-1.8.3 ant
  • 3、环境变量设置

将ANT_HOME设置到当前用户的.bash_profile文件

  1. vi /root/.bash_profile
  2. export ANT_HOME=/usr/local/ant
  3. export PATH=/usr/local/ant/bin:$PATH
  • 4、測试

用ant命令測试执行情况

  1. [root@bogon san1156]# ant
  2. Buildfile: build.xml does not exist!
  3. Build failed
  4. [root@bogon san1156]# ant -version
  5. Apache Ant(TM) version 1.8.3 compiled on February 26 2012

若出现以上内容。说明正常成功安装

否则,若出现这种错误:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/tools/ant/launch/Launcher

这是linux系统默认安装了一些ant的lib。改动 /etc/ant.conf中 ANT_HOME=/usr/share/ant 为你正确安装ant的地址。如 /usr/local/ant

注:编译thriftproject要用到ant。thrift中的javaproject配置好了build.xml。故不须要手动改动此文件。

參考网址:http://blog.csdn.net/nivana999/article/details/6526961

3、安装ivy

  • 1、下载

下载apache ivy:http://labs.mop.com/apache-mirror//ant/ivy/2.2.0/apache-ivy-2.2.0-bin.tar.gz

  • 2、解压

tar -xzvf apache-ivy-2.2.0-bin.tar.gz

  • 3、安装

cp ivy-2.2.0.jar ANT_HOME/lib

  • 4、測试

cd 到 apache-ivy-2.2.0/src/example/hello-ivy,执行ant

假设看到:

  1. BUILD SUCCESSFUL
  2. Total time: 29 seconds

就代表欧了

4、部署其它语言环境

智能安装命令。此命令须要远程下载一些安装包。并自己主动安装。下载文件大小共计60M,时间依据你的下载速度而定。

  1. sudo yum install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-devel

官方说明: Installing the required packages on CentOS 5 http://wiki.apache.org/thrift/GettingCentOS5Packages

5、安装thrift

  • 1、下载thrift

http://mirror.bjtu.edu.cn/apache/thrift/0.8.0/thrift-0.8.0.tar.gz

  • 2、解压
  1. tar -zxvf thrift-0.8.0.tar.gz
  • 3、编译
  1. cd thrift-0.8.0
  2. ./configure
  3. make
  4. make install
  • 4、測试

在命今行内输入thrift。假设有提示命令用法。证明能够了。

假设提示命令不可用。请接着本文向下看,对症下药,方可药到病除。

四、碰到的问题和解决方法

  1. 事无巨细,再简单的事情。做起来往往也不是一帆风顺,更何况是部署强大的thrift系统了。
  2. 只是,经历过风雨,才干见到最灿烂的彩虹!仅仅有经受了层层不绝的bug磨练,才干锻炼出程序猿这颗坚强勇敢的心!

1、Error: libcrypto required

  • 1、错误信息:在安装thrift过程中,运行./configure。报错Error: libcrypto required
  • 2、解决方法:请安装libssl-dev
  • 3、实施步骤:

yum install openssl openssl-devel libmcrypt libmcrypt-devel curl-devel

此命令自己主动下载安装程序,并安装,可谓快捷方便。纯傻瓜式操作

2、Building Java Library ........ : no

  • 1、安装目的:thrift支持多语言环境,可谓难能可贵,而java和c++又是两大语种。缺少不论什么一个都是遗憾。故,搭建thrift最少支持两种语言。这里选择java、c++和python。

  • 2、错误信息:在安装thrift过程中,运行./configure。报语言环境时,结果是Building Java Library ........ : no。显然非吾等所愿。

  1. Building code generators ..... :
  2. Building C++ Library ......... : yes
  3. Building C (GLib) Library .... : no
  4. Building Java Library ........ : no
  5. Building C# Library .......... : no
  6. Building Python Library ...... : yes
  7. Building Ruby Library ........ : no
  8. Building Haskell Library ..... : no
  9. Building Perl Library ........ : no
  10. Building PHP Library ......... : yes
  11. Building Erlang Library ...... : no
  12. Building Go Library .......... : no
  13. Building TZlibTransport ...... : yes
  14. Building TNonblockingServer .. : yes
  • 3、解决方法:在同级文件夹下,more config.log,查看不支持java环境的根本原因。

事实上,原因也无非是安装jdk、ant或者ivy不成功导致。

本人安装是碰到的问题是:

  1. configure:16550: checking for javac and java
  2. Running "javac configtest_ax_javac_and_java.java"
  3. Running "java configtest_ax_javac_and_java"
  4. Exception in thread "main" java.lang.NoClassDefFoundError: configtest_ax_javac_and_java
  5. Running "kaffe configtest_ax_javac_and_java"
  6. ./configure: line 16569: kaffe: command not found
  7. Running "jikes configtest_ax_javac_and_java.java"
  8. ./configure: line 16562: jikes: command not found
  9. Running "gcj -C configtest_ax_javac_and_java.java"
  10. Running "java configtest_ax_javac_and_java"
  11. Exception in thread "main" java.lang.NoClassDefFoundError: configtest_ax_javac_and_java
  12. Running "kaffe configtest_ax_javac_and_java"
  13. ./configure: line 16569: kaffe: command not found
  14. configure:16583: result: no

此问题的解决,不要去找configtest_ax_javac_and_java.java这个是否存在,由于找半天也找不到。

这样的错误往往是环境变量classpath配置有问题,须要在classpath前面加入“./:”,默认从同级文件夹下找javaproject文件。

3、java.util.zip.ZipException: error in opening zip file

  • 1、错误信息:在编译thriftproject时。运行make命令。报如上的错误。具体信息例如以下:
  1. Making all in java
  2. make[3]: Entering directory `/home/san1156/soft/thrift-0.8.0/lib/java'
  3. /usr/local/ant/bin/ant
  4. Buildfile: /home/san1156/soft/thrift-0.8.0/lib/java/build.xml
  5.  
  6. setup.init:
  7.  
  8. mvn.ant.tasks.check:
  9.  
  10. proxy:
  11.  
  12. mvn.ant.tasks.download:
  13. [get] Getting: http://repo1.maven.org/maven2/org/apache/maven/maven-ant-tasks/2.1.3/maven-ant-tasks-2.1.3.jar
  14. [get] To: /home/san1156/soft/thrift-0.8.0/lib/java/build/tools/maven-ant-tasks-2.1.3.jar
  15. [get] Not modified - so not downloaded
  16.  
  17. mvn.init:
  18. Unable to obtain resource from /home/san1156/soft/thrift-0.8.0/lib/java/build/tools/maven-ant-tasks-2.1.3.jar: java.util.zip.ZipException: error in opening zip file
  19. [typedef] Unable to obtain resource from /home/san1156/soft/thrift-0.8.0/lib/java/build/tools/maven-ant-tasks-2.1.3.jar:
  20. [typedef] java.util.zip.ZipException: error in opening zip file
  21. [typedef] at java.util.zip.ZipFile.open(Native Method)
  22. [typedef] at java.util.zip.ZipFile.<init>(ZipFile.java:127)
  23. [typedef] at java.util.jar.JarFile.<init>(JarFile.java:135)
  24. [typedef] at java.util.jar.JarFile.<init>(JarFile.java:99)
  25. [typedef] at org.apache.tools.ant.AntClassLoader.getResourceURL(AntClassLoader.java:1006)
  26. [typedef] at org.apache.tools.ant.AntClassLoader$ResourceEnumeration.findNextResource(AntClassLoader.java:149)
  27. [typedef] at org.apache.tools.ant.AntClassLoader$ResourceEnumeration.<init>(AntClassLoader.java:110)
  28. [typedef] at org.apache.tools.ant.AntClassLoader.findResources(AntClassLoader.java:953)
  29. [typedef] at org.apache.tools.ant.AntClassLoader.getNamedResources(AntClassLoader.java:922)
  30. [typedef] at org.apache.tools.ant.loader.AntClassLoader5.getResources(AntClassLoader5.java:56)
  31. [typedef] at org.apache.tools.ant.taskdefs.Definer.resourceToURLs(Definer.java:375)
  32. [typedef] at org.apache.tools.ant.taskdefs.Definer.execute(Definer.java:267)
  33. [typedef] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
  34. [typedef] at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
  35. [typedef] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  36. [typedef] at java.lang.reflect.Method.invoke(Method.java:597)
  37. [typedef] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
  38. [typedef] at org.apache.tools.ant.Task.perform(Task.java:348)
  39. [typedef] at org.apache.tools.ant.Target.execute(Target.java:392)
  40. [typedef] at org.apache.tools.ant.Target.performTasks(Target.java:413)
  41. [typedef] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
  42. [typedef] at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
  43. [typedef] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
  44. [typedef] at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
  45. [typedef] at org.apache.tools.ant.Main.runBuild(Main.java:811)
  46. [typedef] at org.apache.tools.ant.Main.startAnt(Main.java:217)
  47. [typedef] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
  48. [typedef] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
  49. [typedef] Could not load definitions from resource org/apache/maven/artifact/ant/antlib.xml. It could not be found.
  50.  
  51. BUILD FAILED
  52. /home/san1156/soft/thrift-0.8.0/lib/java/build.xml:267: Problem: failed to create task or type antlib:org.apache.maven.artifact.ant:remoteRepository
  53. Cause: The name is undefined.
  54. Action: Check the spelling.
  55. Action: Check that any custom tasks/types have been declared.
  56. Action: Check that any <presetdef>/<macrodef> declarations have taken place.
  57. No types or tasks have been defined in this namespace yet
  58.  
  59. This appears to be an antlib declaration.
  60. Action: Check that the implementing library exists in one of:
  61. -/usr/local/ant/lib
  62. -/root/.ant/lib
  63. -a directory added on the command line with the -lib argument
  64.  
  65. Total time: 0 seconds
  66. make[3]: *** [all-local] Error 1
  67. make[3]: Leaving directory `/home/san1156/soft/thrift-0.8.0/lib/java'
  68. make[2]: *** [all-recursive] Error 1
  69. make[2]: Leaving directory `/home/san1156/soft/thrift-0.8.0/lib'
  70. make[1]: *** [all-recursive] Error 1
  71. make[1]: Leaving directory `/home/san1156/soft/thrift-0.8.0'
  72. make: *** [all] Error 2

2、处理方法: It could be related to log4j. http://stackoverflow.com/questions/325202/java-util-zip-zipexception-error-in-opening-zip-file

另外,thrift官网要求java必须安装SLF4J,故,基本确定是未安装SLF4J导致。

4、安装SLF4J、log4j

  • 1、下载

官网上下载apache-log4j-1.2.16.tar.gz、slf4j-1.6.4.tar.gz

下载地址各自是: http://mirror.bjtu.edu.cn/apache/logging/log4j/1.2.16/apache-log4j-1.2.16.tar.gz

http://www.slf4j.org/dist/slf4j-1.6.4.tar.gz

  • 2、安装

将须要的jar包放到运行位置,操作例如以下:

须要的jar包:log4j-1.2.16.jar、slf4j-api-1.6.4.jar、slf4j-log4j12-1.6.4.jar

指定位置:/home/san1156/soft/jdk1.6.0_30/lib/。也就是jdk的classpath路径。

  • 3、clean中间文件

因为报错的时候产生了一些暂时文件。须要运行

  1. [root@localhost thrift-0.8.0]# make clean

或者

  1. [root@localhost java]# cd /home/san1156/soft/thrift-0.8.0/lib/java
  2. [root@localhost java]# ant clean
  • 4、又一次编译。
  1. [root@localhost thrift-0.8.0]# make

或者

  1. [root@localhost java]# cd /home/san1156/soft/thrift-0.8.0/lib/java
  2. [root@localhost java]# ant
  3. 运行通过,说明java环境木有问题
  1. 以上问题和解决方法,是本人编译过程中所总结,希望对后来者实用
  2. 假设不幸,你碰到的问题,这里没有述及,能够联系本人一块探讨

五、其它软件的安装方法

  • 1、centos boost install

http://blog.163.com/solylee@126/blog/static/171823157201101811587203/

http://hi.baidu.com/lbxthinker/blog/item/527b88ca1d8002f253664f68.html

(centos应用程序有自己的boost,点击更新就可以完毕安装,就是版本号较低)

  • 2、gcc download

http://gcc.gnu.org/mirrors.html

  • 3、gcc安装(未装)

http://zhidao.baidu.com/question/1251827.html

  • 4、linux下JAVA安装。及Java环境变量配置

http://apps.hi.baidu.com/share/detail/3320416

  • 5、ant安装

http://blog.csdn.net/nivana999/article/details/6526961

  1. export ANT_HOME=/home/san1156/soft/apache-ant-1.8.3
  2. export PATH=/home/san1156/soft/apache-ant-1.8.3/bin:$PATH
  3. 改动/root/.bash_profile这个文件,后面加入上面的环境变量
  4. 校验ant方法:直接输入ant,提示须要build.xml文件
  • 6、linux下python的安装

http://www.cnblogs.com/ewyb/archive/2010/10/26/1861744.html

六、參考网址

官方文档:

编译安装thrift

http://wiki.apache.org/thrift/ThriftInstallation

Installing the required packages on CentOS 5

http://wiki.apache.org/thrift/GettingCentOS5Packages

Thrift安装介绍的更多相关文章

  1. Apache Thrift安装介绍 (ubuntu)

    apache thrift是一种常用的远程服务调用框架. 下面对apache thrift的安装进行介绍: 下面是thrift的源码安装: Debian/Ubuntu (14+) 编译运行依赖安装 $ ...

  2. thrift 安装介绍

    一.About  thrift            thrift是一种可伸缩的跨语言服务的发展软件框架.它结合了功能强大的软件堆栈的代码生成引擎,以建设服务,工作效率和无缝地与C + +,C#,Ja ...

  3. Thrift架构介绍

    Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目.Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型, ...

  4. Thrift框架介绍

    1.前言 Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目.Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和 ...

  5. Redis安装介绍

    Redis安装介绍 一.Linux版本及配置 1.  Linux版本:Red Hat Enterprise Linux 6虚拟机 2.  配置: 内存:1G:CPU:1核:硬盘:20G 二.Redis ...

  6. Docker版本与安装介绍

    Docker版本与安装介绍 Docker-CE 和 Docker-EE Centos 上安装 Docker-CE Ubuntu 上安装 Docker-CE Docker-CE和Docker-EE Do ...

  7. thrift安装及python和c++版本调试

    一.安装过程 1.安装依赖库 ]# yum install boost-devel-static libboost-dev libboost-test-dev libboost-program-opt ...

  8. 三、安装cmake,安装resin ,tars服务,mysql 安装介绍,安装jdk,安装maven,c++ 开发环境安装

    三.安装cmake,安装resin 2018年07月01日 21:32:05 youz1976 阅读数:308   开发环境说明: centos7.2 ,最低配置:1核cpu,2G内存,1M带宽 1. ...

  9. Mac上brew&thrift安装 以及在thrift架构下,自己新作了maven的小例 Demo

    1.缘由 前几天偶尔在网上看到thrift的信息,其内容和作用极大的引起了我的兴趣,因为我也是做iOS开发的,通过在网上的查询发现信息虽然很多实用的很少,容易误导他人,经过自己的成功实践,做了笔录,为 ...

随机推荐

  1. JDBC 学习笔记(八)—— ResultSet

    JDBC 使用 ResultSet 来封装 SQL 的查询结果,可以将 ResultSet 类比为数据库表的查询结果. 它拥有如下两个性质: 可滚动. 可更新. 这两个性质,是在创建 Statemen ...

  2. HUST——1106xor的难题之二(异或树状数组单点修改和区间查询)

    1106: xor的难题之二 时间限制: 2 Sec  内存限制: 128 MB 提交: 8  解决: 3 题目描述 上次Alex学长的问题xor难题很简单吧,现在hkhv学长有个问题想问你们. 他现 ...

  3. P1875 佳佳的魔法药水 (最短路,DP)

    题目链接 Solution 好题. 一开始一直在想怎么蛇皮建图,但是发现一直蛇不出来... 正解是用类似于 dijkstra 的算法对所有点进行松弛. 对于每个元素记录两个值: \(cost\) 代表 ...

  4. bzoj 4184 shallot 时间线建线段树+vector+线性基

    题目大意 n个时间点 每个时间点可以插入一个权值或删除一个权值 求每个时间点结束后异或最大值 分析 异或最大值用线性基 但是线性基并不支持删除操作 我们可以对时间线建一棵线段树 离线搞出每个权值出现的 ...

  5. yii 数据库添加,修改,删除相关操作总结

    yii中关于数据信息的添加数据,修改数据,删除数据的相关操作,刚刚学习没几天,仅记录了一些,以后慢慢再充实,有需要的朋友可以看看. 添加数据的方法 (1)save 方法(对象形式操作) $user=n ...

  6. LeetCode OJ--Insert Interval **

    https://oj.leetcode.com/problems/insert-interval/ 给出有序的区间来,再插入进去一个,也就是区间合并. 刚开始确立了几个思路,看要插入的区间的start ...

  7. LeetCode OJ--Search for a Range

    http://oj.leetcode.com/problems/search-for-a-range/ 要求复杂度为O(lgn),用二分查找的思想. #include <iostream> ...

  8. (40)C#windows服务控制

    ServiceController类 可以使用 ServiceController 类连接到现有服务并控制其行为. 构造函数 1.ServiceController () ServiceControl ...

  9. Xamarin XAML语言教程XAML文件结构与解析XAML

    Xamarin XAML语言教程XAML文件结构与解析XAML XAML文件结构 在上文中,我们创建XAML文件后,会看到类似图1.16所示的结构 图1.16  结构 其中,.xaml文件和.xaml ...

  10. Javao中使用Jackson反序列时,将LinkedHashMap转成对象的方法(将任何Object类型转成实体)

    可能存在这样一种情况,Jackson已经满足了大部分的序列化和反序列化工作,但是对于复杂的泛型实体估计未必能如愿的正常反序列,而此时对于一些泛型里面的实体对象就会反序列化成LinkedHashMap类 ...