Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Rubentxu/58b5c564f9871183a3bd to your computer and use it in GitHub Desktop.
Save Rubentxu/58b5c564f9871183a3bd to your computer and use it in GitHub Desktop.
Installation instructions for the C++ ecosystem

Installation instructions for the C++ ecosystem

This document contains installation instructions for some C++ tools and libraries. It uses the cross-platform build system CMake whenever the software to download, build, configure (and run) supports it.

By default the process is described for a *-nix operating system (OS).

The process described here works very good, if the installed software is added to the path. It is suggested to do this, by adding the following lines to the /etc/profile.local file:

export PATH=/opt/clang+llvm/default/bin:/opt/cloc/default/bin:/opt/cmake/default/bin:/opt/cppcheck/default/bin:/opt/doxygen/default/bin:/opt/flawfinder/default/bin:/opt/gcovr/default/bin:/opt/packetsender/default/bin:/opt/protobuf/default/bin:/opt/qtcreator/default/bin:/opt/qt/default/5.5/gcc_64/bin:/opt/qt/qt-5.5.1:/opt/qt/default/Tools/QtCreator/bin:$PATH
export CPLUS_INCLUDE_PATH=/opt/cpp-markdown/default/include:/opt/libsodium/default/include:/opt/cereal/default/include:/opt/cryptopp/default/include:/opt/gtest/default/include:/opt/gmock/default/include:/opt/protobuf/default/include:$CPLUS_INCLUDE_PATH
export LIBRARY_PATH=/opt/cpp-markdown/default/lib:/opt/cryptopp/default/lib:/opt/libsodium/default/lib:/opt/cereal/default/lib:/opt/cryptopp/default/lib:/opt/gtest/default/lib:/opt/gmock/default/lib:/opt/protobuf/default/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=/opt/cpp-markdown/default/lib:/opt/cryptopp/default/lib:/opt/libsodium/default/lib:/opt/cereal/default/lib:/opt/cryptopp/default/lib:/opt/gtest/default/lib:/opt/gmock/default/lib:/opt/protobuf/default/lib:$LD_LIBRARY_PATH

General-Purpose Library

wget http://downloads.sf.net/project/boost/boost/1.59.0/boost_1_59_0.zip
unzip boost_1_59_0.zip
cd boost_1_59_0
./bootstrap.sh --prefix=/opt/boost/boost-1.59.0
sudo ./b2 install
sudo ln -snf /opt/boost/boost-1.59.0 /opt/boost/default

Building

Source

wget http://cmake.org/files/v3.3/cmake-3.3.2.tar.gz
tar -xf cmake-3.3.2.tar.gz
cmake -G"Unix Makefiles" -Bcmake-3.3.1-build -Hcmake-3.3.2 -DCMAKE_INSTALL_PREFIX=/opt/cmake/cmake-3.3.2
cmake --build cmake-3.3.2-build --target install
sudo ln -snf /opt/cmake/cmake-3.3.2 /opt/cmake/default

Binary

wget http:/cmake.org/files/v3.3/cmake-3.3.2-Linux-x86_64.sh
sh cmake-3.3.2-Linux-x86_64.sh
sudo mkdir /opt/cmake
sudo mv cmake-3.3.2-Linux-x86_64 /opt/cmake/cmake-3.3.2
sudo mv CMake.qch /opt/cmake/cmake-3.3.2/doc
sudo ln -snf /opt/cmake/cmake-3.3.2 /opt/cmake/default

Documentation

Source

wget http://ftp.stack.nl/pub/users/dimitri/doxygen-1.8.10.src.tar.gz
tar -xf doxygen-1.8.10.linux.bin.tar.gz
cd doxygen-1.8.10
./configure --with-doxywizard --prefix=/opt/doxygen/doxygen-1.8.10
make
make docs
sudo make install
sudo ln -snf /opt/doxygen/doxygen-1.8.10 /opt/doxygen/default

Binary

tar -xf doxygen-1.8.10.linux.bin.tar.gz
python -m compileall doxytag.py
mv doxytag.pyc doxygen-1.8.10/bin/doxytag
cd doxygen-1.8.10
./configure --prefix /opt/doxygen/doxygen-1.8.10
sudo make install
sudo ln -snf /opt/doxygen/doxygen-1.8.10 /opt/doxygen/default

Testing

wget http://downloads.sf.net/ltp/lcov-1.11.tar.gz
tar -xf lcov-1.11.tar.gz
sudo make install -C lcov-1.11
# If installing into a custom location (e.g. ~/usr):
#make install -C lcov-1.11 PREFIX=~
# Automatic install with "Pip Installs Python (pip)":
sudo pip install gcovr

# If installing into a custom location (e.g. ~/usr):
wget https://github.com/gcovr/gcovr/archive/3.2.zip
unzip gcovr-3.2.zip
mkdir -p /opt/gcovr/gcovr-3.2/bin
sudo cp gcovr-3.2/scripts/gcovr /opt/gcovr/gcovr-3.2/bin
sudo ln -snf /opt/gcovr/gcovr-3.2 /opt/gcovr/default
wget https://googletest.googlecode.com/files/gtest-1.7.0.zip
unzip gtest-1.7.0.zip
cmake -G"Unix Makefiles" -Bgtest-1.7.0-build -Hgtest-1.7.0
cmake --build gtest-1.7.0-build
sudo mkdir -p /opt/gtest/gtest-1.7.0/include /opt/gtest/gtest-1.7.0/lib
sudo cp -r gtest-1.7.0/include/gtest /opt/gtest/gtest-1.7.0/include
sudo cp gtest-1.7.0-build/libgtest*.a /opt/gtest/gtest-1.7.0/lib
sudo ln -snf /opt/gtest/gtest-1.7.0 /opt/gtest/default
sudo ln -snf /opt/gtest/default/include/gtest /usr/include/gtest
sudo ln -snf /opt/gtest/default/lib/libgtest.a /usr/lib/libgtest.a
sudo ln -snf /opt/gtest/default/lib/libgtest_main.a /usr/lib/libgtest_main.a
wget https://googlemock.googlecode.com/files/gmock-1.7.0.zip
unzip gmock-1.7.0.zip
cmake -G"Unix Makefiles" -Bgmock-1.7.0-build -Hgmock-1.7.0
cmake --build gmock-1.7.0-build
sudo mkdir -p /opt/gmock/gmock-1.7.0/include /opt/gmock/gmock-1.7.0/lib
sudo cp -r gmock-1.7.0/include/gmock /opt/gmock/gmock-1.7.0/include
sudo cp gmock-1.7.0-build/libgmock*.a /opt/gmock/gmock-1.7.0/lib
sudo ln -snf /opt/gmock/gmock-1.7.0 /opt/gmock/default
sudo ln -snf /opt/gmock/default/include/gmock /usr/include/gmock
sudo ln -snf /opt/gmock/default/lib/libgmock.a /usr/lib/libgmock.a
sudo ln -snf /opt/gmock/default/lib/libgmock_main.a /usr/lib/libgmock_main.a

Compiler

Download release files

wget llvm-3.6.2.src.tar.xz
wget compiler-rt-3.6.2.src.tar.xz
wget cfe-3.6.2.src.tar.xz
wget clang-tools-extra-3.6.2.src.tar.xz

Extract downloaded release files

tar -xf llvm-3.6.2.src.tar.xz
tar -xf compiler-rt-3.6.2.src.tar.xz
tar -xf cfe-3.6.2.src.tar.xz
tar -xf clang-tools-extra-3.6.2.src.tar.xz

Create file structure for build

mv -f ./cfe-3.6.2.src ./clang
mv -f ./clang ./llvm-3.6.2.src/tools
mv -f ./compiler-rt-3.6.2.src ./compiler-rt
mv -f ./compiler-rt ./llvm-3.6.2.src/projects
mv -f ./clang-tools-extra-3.6.2.src ./extra
mv -f ./extra ./llvm-3.6.2.src/tools/clang/tools

Build out-of-source with CMake and install

cmake -G"Unix Makefiles" -Bllvm-3.6.2.build -Hllvm-3.6.2.src -DCMAKE_INSTALL_PREFIX=/opt/clang+llvm/clang+llvm-3.6.2
cmake --build llvm-3.6.2.build
sudo cmake --build llvm-3.6.2.build --target install
sudo ln -snf /opt/clang+llvm/llvm-3.6.2 /opt/llvm/default

Verify

Try to run a syntax check on a file using clang++:

clang++ -v main.cc -fsyntax-only

Check the standard/error output. If the output contains something similar to the following, Clang is unable to detect libstd++:

main.cc:1:10: fatal error: 'iostream' file not found
#include <iostream>
         ^
1 error generated.

Check the include paths of GCC:

g++ -v -x c++ /dev/null -fsyntax-only

Add the include paths missing for Clang to the environment variable CPLUS_INCLUDE_PATH:

export CPLUS_INCLUDE_PATH=/usr/include/c++/5:/usr/include/c++/5/x86_64-suse-linux:$CPLUS_INCLUDE_PATH

Check via the following command:

clang++ -v -x c++ /dev/null -fsyntax-only

Static Code Analysis

wget http://downloads.sf.net/project/cloc/cloc/v1.64/cloc-1.64.tar.gz
tar -xf cloc-1.64.tar.gz
sudo make prefix=/opt/cloc/cloc-1.64 install -C cloc-1.64
sudo ln -snf /opt/cloc/cloc-1.64 /opt/cloc/default
wget http://downloads.sf.net/project/cppcheck/cppcheck/1.70/cppcheck-1.70.zip
unzip cppcheck-1.70.tar.gz
sudo make install -C cppcheck-1.70 SRCDIR=build PREFIX=/opt/cppcheck/cppcheck-1.70 CFGDIR=/opt/cppcheck/cppcheck-1.70
sudo ln -snf /opt/cppcheck/cppcheck-1.70 /opt/cppcheck/default
tar -xf flawfinder-1.31.tar.gz
sudo make install -C flawfinder-1.31 prefix=/opt/flawfinder/flawfinder-1.31
sudo ln -snf /opt/flawfinder/flawfinder-1.31 /opt/flawfinder/default
wget http://include-what-you-use.org/downloads/include-what-you-use-0.4.src.tar.gz
tar -xf include-what-you-use-0.4.src.tar.gz
cmake -G"Unix Makefiles" -Binclude-what-you-use-0.4-build -Hinclude-what-you-use -DIWYU_LLVM_ROOT_PATH=/opt/clang+llvm/default -DCMAKE_INSTALL_PREFIX=/opt/include-what-you-use/include-what-you-use-0.4
sudo cmake --build include-what-you-use-0.4-build --target install
sudo cp include-what-you-use/iwyu_tool.py /opt/include-what-you-use/include-what-you-use-0.4/bin
sudo ln -snf /opt/include-what-you-use/include-what-you-use-0.4 /opt/include-what-you-use/default
sudo ln -nf /opt/include-what-you-use/default/bin/include-what-you-use /opt/clang+llvm/default/bin/include-what-you-use
sudo ln -nf /opt/include-what-you-use/default/bin/iwyu_tool.py /opt/clang+llvm/default/bin/iwyu_tool.py

Profiling / Memory Checking

wget http://valgrind.org/downloads/valgrind-3.10.1.tar.bz2
tar -xf valgrind-3.10.1.tar.bz2
cd valgrind-3.10.1
sh ./configure --build x86_64-w64-linux-gnu
# If using "MinGW" with a "Microsoft Windows" OS:
#sh ./configure --build x86_64-w64-mingw32
make
make check

Cryptography

wget https://cryptopp.com/cryptopp563.zip
unzip cryptopp563.zip -d cryptopp563
cp cryptopp563/config.h cryptopp563/config.h.bak
mv cryptopp563/config.recommend cryptopp563/config.h
export CXXFLAGS="-std=c++11 -DNDEBUG"
make -C cryptopp563 static dynamic cryptest.exe
sudo make -C cryptopp563 install PREFIX=/opt/cryptopp/cryptopp-5.6.3
sudo ln -sfn /opt/cryptopp/cryptopp-5.6.3 /opt/cryptopp/default
cryptopp563/cryptest.exe v
cryptopp563/cryptest.exe tv all
wget https://github.com/jedisct1/libsodium/archive/1.0.3.zip
unzip libsodium-1.0.3.zip
cd libsodium-1.0.3
./autogen.sh
./configure --prefix=/opt/libsodium/libsodium-1.0.3
make && make check
sudo make install
sudo ln -snf /opt/libsodium/libsodium-1.0.3 /opt/libsodium/default

The installation of Sodium can be tested by creating the following C++ program (file hello_sodium.cc):

#include <iostream>

#include <sodium.h>

int main() {
  if (sodium_init() == -1) {
    return 1;
  }

  std::cout << "hello, sodium\n";
}

Execute the following to compile, link and run the program:

g++ -o hello_sodium hello_sodium.cc -lsodium
./hello_sodium

The following should be printed to the standard output:

hello, world

Messaging

wget https://github.com/google/protobuf/archive/v3.0.0-alpha-4.1.zip
unzip protobuf-3.0.0-alpha-4.1.zip
cp gmock-1.7.0.zip protobuf-3.0.0-alpha-4.1
cd protobuf-3.0.0-alpha-4.1
unzip gmock-1.7.0.zip
mv gmock-1.7.0 gmock
./autogen.sh
./configure --prefix=/opt/protobuf/protobuf-3.0.0-alpha-4.1
sudo make install
sudo ln -snf /opt/protobuf/protobuf-3.0.0-alpha-4.1 /opt/protobuf/default

Serialization

wget https://github.com/USCiLab/cereal/archive/v1.1.2.zip
unzip cereal-1.1.2.zip
cmake -G"Unix Makefiles" -Bcereal-1.1.2-build -Hcereal-1.1.2 -DCMAKE_INSTALL_PREFIX=/opt/cereal/cereal-1.1.2
cmake --build cereal-1.1.2-build
sudo mkdir -p /opt/cereal/cereal-1.1.2
sudo cp -r cereal-1.1.2/include /opt/cereal/cereal-1.1.2
sudo ln -snf /opt/cereal/cereal-1.1.2 /opt/cereal/default
wget https://yaml-cpp.googlecode.com/files/yaml-cpp-0.5.1.tar.gz
tar -xf yaml-cpp-0.5.1.tar.gz
cmake -G"Unix Makefiles" -Byaml-cpp-0.5.1-build -Hyaml-cpp-0.5.1
cmake --build yaml-cpp-0.5.1-build
sudo cp -a yaml-cpp-0.5.1/include/yaml-cpp /usr/include
sudo cp yaml-cpp-0.5.1-build/libyaml-cpp.a /usr/lib

Python

wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py

Network

Packet Sender

wget https://github.com/dannagle/PacketSender/archive/v4.1.tar.gz
tar -xf PacketSender-4.1.tar.gz
cd PacketSender-4.1/src
qmake
make
sudo mkdir -p /opt/packetsender/packetsender-4.1/bin /opt/packetsender/packetsender-4.1/doc
sudo cp PacketSender /opt/packetsender/packetsender-4.1/bin
sudo cp ../LICENSE ../README.md /opt/packetsender/packetsender-4.1/doc
sudo ln -snf /opt/packetsender/packetsender-4.1 /opt/packetsender/default

Middleware

su
wget http://download.dre.vanderbilt.edu/previous_versions/ACE+TAO-6.3.1.tar.gz
tar -xf ACE+TAO-6.3.1.tar.gz
export ACE_ROOT=$PWD/ACE_wrappers
echo "#include <ace/config-linux.h>" > $ACE_ROOT/ace/config.h
echo "" >> $ACE_ROOT/ace/config.h
echo "INSTALL_PREFIX = /usr/local" > $ACE_ROOT/include/makeinclude/platform_macros.GNU
echo "include \$(ACE_ROOT)/include/makeinclude/platform_linux.GNU" >> $ACE_ROOT/include/makeinclude/platform_macros.GNU
sudo make install -C $ACE_ROOT/ace
make -C $ACE_ROOT/apps/gperf
export TAO_ROOT=$ACE_ROOT/TAO
make install -C $TAO_ROOT

Document Formats

Markdown

wget https://github.com/sevenjay/cpp-markdown/archive/master.zip
unzip -qq cpp-markdown-master.zip
cmake -G"Unix Makefiles" -Bcpp-markdown-master-build -Hcpp-markdown-master
cmake --build cpp-markdown-master-build
sudo mkdir -p /opt/cpp-markdown/cpp-markdown-1.0.0/include /opt/cpp-markdown/cpp-markdown-1.0.0/lib
sudo cp cpp-markdown-master/src/*.h /opt/cpp-markdown/cpp-markdown-1.0.0/include
sudo cp cpp-markdown-master-build/*.a /opt/cpp-markdown/cpp-markdown-1.0.0/lib
sudo ln -snf /opt/cpp-markdown/cpp-markdown-1.0.0 /opt/cpp-markdown/default
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment