Installing Dependencies
Up to the main page
Dependencies
- Required
- g++ and bash
- Filtering and Estimation
- Boost, zlib, and cmake
- Log-linear Interpolation (rare)
- Eigen3 and OpenMP support in g++
- Optional
- bzip2 and xz
To install dependencies, choose
one of the options below.
Recommended: Package Managers
If you have root, package managers are easiest. Some distributions separately package compiled libraries and headers (often by appending -dev). Since you will be compiling code from source, both are required.
On Debian/Ubuntu
To get a working compiler, install the
build-essential
package. Boost is known as
libboost-all-dev
. The three supported compression options each have a separate dev package.
sudo apt-get install build-essential libboost-all-dev cmake zlib1g-dev libbz2-dev liblzma-dev
On Gentoo
Static libraries are faster; this script will configure static libraries and install dependencies.
cat >> /etc/portage/package.use <<EOF
dev-libs/boost static-libs
sys-libs/zlib static-libs
app-arch/bzip2 static-libs
app-arch/xz-utils static-libs
EOF
emerge boost cmake sys-libs/zlib bzip2 xz-utils
Fallback: Home Directory
Software can be installed in your home directory by compiling from source. I only recommend this method if you do not have root. Since your home directory is not a standard installation path, several environment variables are needed:
PATH
- Path to executables searched by the shell (bin).
CPATH
- Additional paths that gcc searches for headers at compile time (include).
LIBRARY_PATH
- Additional paths that gcc searches for libraries at link time (lib or lib64).
LD_LIBRARY_PATH
- On Linux and BSD, the linker searches these paths for shared libraries at runtime (lib or lib64). On OS X, this is called
DYLD_LIBRARY_PATH
.
Each of these is an ordered list of paths delimited by colon. Note that empty string is sometimes interpreted as the current directory, so it is not correct to do LIBRARY_PATH=$LIBDIR:$LIBRARY_PATH because it may have been empty to begin with. Bash users can add this script to
.bashrc
(assuming the environment is setup to read it):
#Determine where you want to install packages
PREFIX=$HOME/usr
#If your system has lib64 directories, lib64 should be used instead of lib
if [ -d /lib64 ]; then
LIBDIR=$PREFIX/lib64
else
LIBDIR=$PREFIX/lib
fi
#If you're installing to a non-standard path, tell programs where to find things:
export PATH=$PREFIX/bin${PATH:+:$PATH}
export CPATH=$PREFIX/include${CPATH:+:$CPATH}
export LIBRARY_PATH=$LIBDIR${LIBRARY_PATH:+:$LIBRARY_PATH}
if [ "$(uname)" == Darwin ]; then
export DYLD_LIBRARY_PATH=$LIBDIR${DYLD_LIBRARY_PATH:+:$DYLD_LIBRARY_PATH}
else
export LD_LIBRARY_PATH=$LIBDIR${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
fi
Remember to configure the running shell as well.
source .bashrc
Packages with ./configure
For packages based on GNU autotools, use
./configure --prefix=$PREFIX --libdir=$LIBDIR
make -j4
make install
zlib
zlib is optional for queries but required for filtering and estimation. Install before compiling Boost. You may skip this step if you have both
libz.a and
libz.so in a lib directory.
wget http://zlib.net/zlib-1.2.11.tar.gz
tar xzf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure --prefix=$PREFIX --libdir=$LIBDIR
make -j4
make install
make clean
./configure --prefix=$PREFIX --libdir=$LIBDIR --static
make -j4
make install
cd ..
bzip2
bzip2 is optional for KenLM, but required for Boost to compile correctly. It has a Makefile but no ./configure.
wget https://netix.dl.sourceforge.net/project/bzip2/bzip2-1.0.6.tar.gz
tar xzvf bzip2-1.0.6.tar.gz
cd bzip2-1.0.6/
#Compile and install libbz2.a (static library)
make
make install PREFIX=$PREFIX
mkdir -p $LIBDIR
#Note this may be the same file; you can ignore the error
mv $PREFIX/lib/libbz2.a $LIBDIR 2>/dev/null
#Compile and install libbz2.so (dynamic library)
make clean
make -f Makefile-libbz2_so
cp libbz2.so.* $LIBDIR
ln -sf libbz2.so.1.0 $LIBDIR/libbz2.so
cd ..
Boost
Boost requires
zlib and
bzip2. After those are installed (and most systems have these installed already), compile Boost:
wget https://dl.bintray.com/boostorg/release/1.72.0/source/boost_1_72_0.tar.bz2
tar xjf boost_1_72_0.tar.bz2
cd boost_1_72_0
./bootstrap.sh
#Note that this may fail. A common cause is incorrectly installed gzip or bzip2. KenLM does not use the iostreams library, so it might work anyway. But an incomplete install will break other packages like Moses.
./b2 --prefix=$PREFIX --libdir=$LIBDIR --layout=tagged link=static,shared threading=multi,single install -j4 || echo FAILURE
cd ..