簡體   English   中英

如何在CentOS 7上通過clang構建libcxx和libcxxabi

[英]How to Build libcxx and libcxxabi by clang on CentOS 7

我想在CentOS 7上使用帶有clang / clang ++的C ++ 11或C ++ 14.如何構建這個構建環境?

本文教授如何在CentOS 7上構建C ++ 11構建環境:RHEL的EPEL repo提供Clang包,但沒有C ++庫包。 因此,這些部件手工制作有點麻煩。 Clang的自定義C ++庫是libc ++(libcxx)[1]。 然后,libcxx還需要一個ABI庫libc ++ abi(libcxxabi)[2]。 不幸的是,這兩個庫存在循環依賴問題。 為了打破循環依賴問題,可以在不鏈接libc ++ abi的情況下構建libc ++。 然后,使用這個libc ++,我們可以構建libc ++ abi鏈接libc ++。 最后,使用libc ++ abi,​​我們可以構建一個新的libc ++鏈接libc ++ abi。

clang,libc ++和libc ++ abi環境構建步驟如下:

  1. 添加RHEL的EPEL回購。 打開以下鏈接,找到“我如何使用這些額外的包?”部分。 https://fedoraproject.org/wiki/EPEL
    找到CentOS版本的epel包。 例如,:

     sudo rpm -i https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 
  2. 安裝Subversion以獲取最新的libcxx和libcxxabi。

     sudo yum install svn 
  3. 安裝Clang和llvm-devel(使用llvm-config)。

     sudo yum install clang llvm-devel 
  4. 安裝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. 
  5. 第一輪沒有libcxxabi構建libcxx。

     # 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 .. 
  6. 使用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 ../.. 
  7. 第二輪用libcxxabi構建libcxx。

     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 
  8. 編寫C ++測試程序。

     // t.cpp #include <iostream> using namespace std; int main() { cout << "Hello world!" << endl; } 
  9. 通過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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM