Thrift is a software framework for scalable cross-language services development. It combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml.
Originally developed at Facebook, Thrift was open sourced in April 2007 and entered the Apache Incubator in May, 2008.
1) Requirement software
- A relatively POSIX-compliant *NIX system
- Cygwin or MinGW can be used on Windows
- g++ 3.3.5+
- boost 1.33.1+ (1.34.0 for building all tests)
- Runtime libraries for lex and yacc might be needed for the compiler.
Requirements for building from SVN
- GNU build tools: autoconf 2.59+ (2.60+ recommended), automake 1.9+, libtool 1.5.24+
- pkg-config autoconf macros (pkg.m4) (Use MacPorts for Mac OS X)
- lex and yacc (developed primarily with flex and bison)
- Boost 1.33.1+
- libevent (optional, to build the nonblocking server)
- zlib (optional)
- Java 1.5+
- Apache Ant
- Apache Ivy (recommended)
- Apache Commons Lang (recommended)
- C#: Mono 1.2.4+ (and pkg-config to detect it) or Visual Studio 2005+
- Python 2.4+ (including header files for extension modules)
- PHP 5.0+ (optionally including header files for extension modules)
- Ruby 1.8+ (including header files for extension modules)
- Erlang R12 (R11 works but not recommended)
- Perl 5
These are only required if you choose to build the libraries for the given language.
2) Install Requirement software
In Redhat or Centos
sudo yum install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-devel
sudo apt-get install libboost-dev libboost-test1.40-dev libevent-dev automake libtool flex bison pkg-config g++Then install the Java JDK of your choice. Type javac to see a list of available packages,pick the one you prefer and apt-get install it. Debian Lenny Users need some packages from backports =>sudo apt-get -t lenny-backports install automake libboost-test1.40-dev Some other packages depend on what languages you want Thrift to support.
- For ruby, install ruby-dev librspec-ruby rake rubygems.
- For python, install python-dev python-twisted.
- For perl, install libbit-vector-perl.
- For php, install php5-dev php5-cli.
- For c_glib, install libglib2.0-dev (Debian Lenny Users => sudo apt-get -t lenny-backports install libglib2.0-dev)
- For erlang, install erlang-base
- For csharp, install mono-gmcs libmono-dev
- For haskell, install ghc6 cabal-install libghc6-binary-dev libghc6-network-dev libghc6-http-dev
CompilingFirst make sure your system meets ThriftRequirements If you are building from the first time out of the source repository,you will need to generate the configure scripts.(This is not necessary if you downloaded a tarball.)From the top directory, do:./bootstrap.sh
Once the configure scripts are generated, thrift can be configured.
From the top directory, do:./configure
(if getting errors using Ubuntu, check out the workarounds)
You may need to specify the location of the boost files explicitly.
If you installed boost in /usr/local,
you would run configure as follows:./configure --with-boost=/usr/local
If you want to override the logic of the detection of the Java SDK, use the JAVAC environment variable:./configure JAVAC=/usb/bin/javac
Note that by default the thrift C++ library is typically built with debugging symbols included.
If you want to customize these options you should use the CXXFLAGS option in configure, as such:./configure CXXFLAGS='-g -O2' ./configure CFLAGS='-g -O2' ./configure CPPFLAGS='-DDEBUG_MY_FEATURE'
Run ./configure --help to see other configuration options
Please be aware that the Python library will ignore the --prefix option
and just install wherever Python's distutils puts it (usually along the lines of /usr/lib/pythonX.Y/site-packages/).
If you need to controlwhere the Python modules are installed, set the PY_PREFIX variable.
(DESTDIR is respected for Python and C++.)
Issues while compiling
If you get the error ./thrift-20080411p1/compiler/cpp/thriftl.cc:2190: undefined reference to `yywrap' you need
If you get the error mv: cannot stat `.deps/TBinaryProtocol.Tpo': No such file or directory
while building the Thrift Runtime Library:
Re-reun configure with --enable-libtool-lock, or
Turn off parallel make using make -j 1 or placing .NOTPARALLEL: in lib/cpp/Makefile.
Although the thrift compiler build appears to be compatible with parallel make without libtool lock,
the thrift runtime build is not. (Thrift 0.2.0, Cygwin/Windows XP)If you get error with PHP or do not want install php extension.configure: error: Cannot find php-config. Please use --with-php-config=PATHconfigure: error: ./configure failed for lib/php/src/ext/thrift_protocol
configure: error: Cannot find php-config. Please use --with-php-config=PATHconfigure: error: ./configure failed for lib/php/src/ext/thrift_protocolRerun the configure script as this:
sudo ./configure --without-php --without-php_extension
From the top directory, become superuser and do:
Note that some language packages must be installed manually using build tools better suited
to those languages (at the time of this writing, this applies to Java, Ruby, PHP).
Look for the README file in the lib/<language>/ folder for more details
on the installation of each language library package.
Java can be built in two ways. The default is to use Ivy.
When the Java build begins, ant will automatically download Apache Ivy into the build directory.
Ivy will then be used to download Thrift's other dependencies.
If you don't have Internet access, you can cd into lib/java and run "ant -Dnoivy=" (without quotes).
You will have to manually include
Thrift's dependencies (except for Ivy) in your CLASSPATH.