CentOS7でclang/clang ++とともにC++ 11またはC++ 14を使用したいのですが、この構築環境を構築するにはどうすればよいですか?
この記事では、CentOS7でC++ 11構築環境を構築する方法について説明します。RHELのEPELリポジトリはClangパッケージを提供しますが、C++ライブラリパッケージは提供しません。ですから、これらの部品は手作業で作るのは少し面倒です。 Clang用にカスタマイズされたC++ライブラリはlibc ++(libcxx)[1]です。次に、libcxxにはABIライブラリlibc ++ abi(libcxxabi)[2]も必要です。残念ながら、これら2つのライブラリには循環依存の問題があります。循環依存の問題を解決するために、libc ++ abiをリンクせずにlibc ++をビルドできます。次に、このlibc ++を使用して、libc ++をリンクするlibc ++ abiを構築できます。最後に、libc ++ abiを使用して、libc ++ abiをリンクする新しいlibc ++を構築できます。
Clang、libc ++、およびlibc ++ abi環境の構築手順を以下に示します。
RHELのEPELリポジトリを追加します。次のリンクを開き、「これらの追加パッケージを使用するにはどうすればよいですか?」セクションを見つけてください。 https://fedoraproject.org/wiki/EPEL
CentOSバージョンのepelパッケージを見つけます。例えば。、:
Sudo rpm -i https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
最新のlibcxxとlibcxxabiを入手するためにSubversionをインストールします。
Sudo yum install svn
Clangとllvm-develを(llvm-configを使用して)インストールします。
Sudo yum install clang llvm-devel
Cmakeをインストールします。
cd /usr/local
wget https://cmake.org/files/v3.5/cmake-3.5.2-Linux-i386.sh
Sudo chmod 755 cmake-3.5.2-Linux-i386.sh
Sudo ./cmake-3.5.2-Linux-i386.sh
# Check cmake is in /usr/local/bin.
libcxxabiなしでlibcxxを構築するための第1ラウンド。
# Get libcxx.
svn co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx
cd libcxx
# It is not recommended to build libcxx in the source root directory.
# So, we make a tmp directory.
mkdir tmp
cd tmp
# Specifying CMAKE_BUILD_TYPE to Release shall generate performance optimized code.
# The CMAKE_INSTALL_PREFIX changes the install path from the default /usr/local to /usr.
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..
Sudo make install
cd ..
rm tmp -rf
cd ..
Libc ++を使用してlibcxxabiをビルドします。
# Get libcxxabi.
svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi
cd libcxxabi
mkdir tmp
cd tmp
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DLIBCXXABI_LIBCXX_INCLUDES=../../libcxx/include ..
Sudo make install
cd ../..
libcxxabiを使用してlibcxxを構築するための第2ラウンド。
cd libcxx
mkdir tmp
cd tmp
# This time, we want to compile libcxx with libcxxabi, so we have to specify LIBCXX_CXX_ABI=libcxxabi and the path to libcxxabi headers, LIBCXX_LIBCXXABI_INCLUDE_PATHS.
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DLIBCXX_CXX_ABI=libcxxabi -DLIBCXX_CXX_ABI_INCLUDE_PATHS=../../libcxxabi/include ..
Sudo make install
C++テストプログラムを作成します。
// t.cpp
#include <iostream>
using namespace std;
int main() {
cout << "Hello world!" << endl;
}
Clang ++によるC++コンパイルをテストします。
# -std specifies the C++ standard. -stdlib specifies the C++ library you want to use with clang/clang++. -lc++abi is necessary, because the new LD (linker and loader) on CentOS 7 doesn't allow indirect library linking.
clang++ -std=c++11 -stdlib=libc++ -lc++abi t.cpp
./a.out
参照:
[1] http://libcxx.llvm.org/
[2] http://libcxxabi.llvm.org/