Voglio usare C++ 11 o C++ 14 con clang/clang ++ su CentOS 7. Come posso creare questo ambiente di costruzione?Come creare libcxx e libcxxabi da clang su CentOS 7
risposta
Questo articolo spiega come creare un ambiente di costruzione C++ 11 su CentOS 7: il repository EPEL di RHEL fornisce pacchetti Clang, ma non pacchetti di librerie C++. Quindi, queste parti sono un po 'fastidiose da costruire a mano. Le librerie C++ personalizzate per Clang sono libC++ (libcxx) [1]. Quindi, libcxx ha anche bisogno di una libreria ABI, libC++ abi (libcxxabi) [2]. Sfortunatamente, queste due librerie hanno un problema di dipendenza circolare. Per rompere il problema della dipendenza circolare, è possibile creare libC++ senza collegare libC++ abi. Quindi, con questa libC++, possiamo costruire libC++ abi che collega libC++. Infine, con libC++ abi, possiamo costruire un nuovo libC++ che collega libC++ abi.
il clangore, libC++ e libC++ ABI passi ambiente di costruzione sono riportati nella seguente:
Aggiungi EPEL repo di RHEL. Apri il seguente link e trova la sezione "Come posso usare questi pacchetti extra?" https://fedoraproject.org/wiki/EPEL
Trova il pacchetto epel per la tua versione di CentOS. . Per esempio,:sudo rpm -i https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
Installare Subversion per ottenere l'ultima libcxx e libcxxabi.
sudo yum install svn
Installare Clang e LLVM-devel (con LLVM-config).
sudo yum install clang llvm-devel
Installare 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.
1 ° giro per creare libcxx senza libcxxabi.
# 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 ..
Costruire libcxxabi con libC++.
# 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 ../..
2 ° giro per creare libcxx con libcxxabi.
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
Scrivere un programma di test C++.
// t.cpp #include <iostream> using namespace std; int main() { cout << "Hello world!" << endl; }
Test compilazione C++ da clang ++.
# -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
Riferimenti:
[1] http://libcxx.llvm.org/
[2] http://libcxxabi.llvm.org/
Questo è davvero utile, vorrei che tu potessi condividere una spiegazione più approfondita del perché questi passaggi sono necessari. –
Inoltre, FWIW, non sembra funzionare su Fedora 20. :( –
Spiacente, non sono un professionista per spiegare tutto esattamente, tuttavia, questi passaggi funzionano solo su CentOS 7. Proverò ad aggiungere alcuni commenti il più possibile –
Se non si vuole costruire qualcosa, è possibile utilizzare C++ 11 ([senza '' ] (http://stackoverflow.com/q/12530406/1398841)) con Clang 3.4.2 e il libstdC++ preinstallato su CentOS 7. Abilitare [EPEL] (https://fedoraproject.org/wiki/EPEL) repository e 'yum install clang' per ottenere [Clang 3.4.2] (https://centos.pkgs.org/7/epel-x86_64/clang-3.4.2-8.el7.x86_64.rpm.htm l). –
phoenix