1. 程式人生 > >Centos7 原始碼安裝 Clang

Centos7 原始碼安裝 Clang

安裝CMake

必須是3.4.3以上版本,直接下載二進位制設定到PATH環境變數就可以了

 

安裝編譯依賴

yum install python-devel libffi-devel graphviz-devel elfutils-libelf-devel readline-devel libedit-devel libxml2-devel protobuf-devel gtext-devel doxygen swig 

 

下載clang原始碼包、gtest rpm包 以及編譯好的clang二進位制包

 

因為gtest yum源沒設定,所以直接使用rpm安裝了。

gtest我用的是gtest-1.6.0-2.el7.x86_64.rpm、gtest-devel-1.6.0-2.el7.x86_64.rpm版本包,

連結地址:https://centos.pkgs.org/7/epel-x86_64/gtest-1.6.0-2.el7.x86_64.rpm.html

 

1)設定編譯環境(官網上編譯好的clang作用編譯器) 

export LD_LIBRARY_PATH=/home/clang500/lib
export CC=/home/clang500/bin/clang
export CXX=/home/clang500/bin/clang++
export CXXFLAGS=-stdlib=libc++
export LDFLAGS='-lc++ -lc++abi -fuse-ld=lld'

 

2)設定llvm目錄,元件包只能放到固定目錄,固定名稱

首先解壓 llvm-7.0.0.src.tar.xz,生成目錄 llvm-7.0.0.src

llvm-7.0.0.src/tools 目錄下的元件:
解壓 cfe-7.0.0.src.tar.xz,重新命名為 llvm-7.0.0.src/tools/clang
解壓 lld-7.0.0.src.tar.xz,重新命名為 llvm-7.0.0.src/tools/lld
解壓 polly-7.0.0.src.tar.xz,重新命名為 llvm-7.0.0.src/tools/polly
解壓 lldb-7.0.0.src.tar.xz,重新命名為 llvm-7.0.0.src/tools/lldb

llvm-7.0.0.src/projects 目錄下的元件:
解壓 openmp-7.0.0.src.tar.xz,重新命名為 llvm-7.0.0.src/projects/openmp
解壓 libcxx-7.0.0.src.tar.xz,重新命名為 llvm-7.0.0.src/projects/libcxx
解壓 libcxxabi-7.0.0.src.tar.xz,重新命名為 llvm-7.0.0.src/projects/libcxxabi
解壓 libunwind-7.0.0.src.tar.xz,重新命名為 llvm-7.0.0.src/projects/libunwind
解壓 compiler-rt-7.0.0.src.tar.xz,重新命名為 llvm-7.0.0.src/projects/compiler-rt

clang 的子元件:
解壓 clang-tools-extra-7.0.0.src.tar.xz,重新命名為 llvm-7.0.0.src/tools/clang/tools/extra

 

編譯安裝clang

mkdir build; cd build; 

cmake .. -DLLVM_OPTIMIZED_TABLEGEN=ON -DLLVM_INCLUDE_DOCS=OFF -DLLVM_ENABLE_RTTI=ON -DLLVM_ENABLE_EH=ON -DLLVM_INSTALL_UTILS=ON -DWITH_POLLY=ON -DLINK_POLLY_INTO_TOOLS=ON -DLLVM_TARGETS_TO_BUILD=X86 -DLIBOMP_ARCH=x86_64 -DBUILD_SHARED_LIBS=ON -DLIBOMP_ENABLE_SHARED=ON -DLLVM_ENABLE_LIBCXX=ON -DLLDB_RELOCATABLE_PYTHON=ON -DLLVM_ENABLE_FFI=ON -DCMAKE_BUILD_TYPE=Release -DCLANG_DEFAULT_CXX_STDLIB=libc++ -DCLANG_INCLUDE_TESTS=OFF -DENABLE_LINKER_BUILD_ID=ON -DENABLE_X86_RELAX_RELOCATIONS=ON -DLIBCXXABI_INCLUDE_TESTS=OFF -DLIBCXX_INCLUDE_BENCHMARKS=OFF -DLIBCXX_INCLUDE_TESTS=OFF -DLIBOMP_TSAN_SUPPORT=ON -DLLDB_BUILD_INTEL_PT=OFF -DLLDB_INCLUDE_TESTS=OFF -DLLVM_ENABLE_OCAMLDOC=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_GO_TESTS=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INSTALL_BINUTILS_SYMLINKS=ON -DLLVM_TOOL_LLGO_BUILD=ON -DLLVM_TOOL_PARALLEL_LIBS_BUILD=ON -DLLVM_ENABLE_PIC=ON -DLIBUNWIND_ENABLE_SHARED=OFF -DLIBCXX_ENABLE_PEDANTIC=ON -DLIBCXXABI_LIBDIR_SUFFIX=64 -DLIBCXX_LIBDIR_SUFFIX=64 -DLIBUNWIND_LIBDIR_SUFFIX=64 -DLLVM_LIBDIR_SUFFIX=64

make -j8; make install

 

注意:這個遇到一個問題,如果gcc沒安裝的話,cmake的時候,會報無法找到 -gcc -gcc_s 的錯誤,所以得需要安裝gcc,不懂是什麼原因怎麼規避這個問題,或者本身clang就需要gcc的庫,希望有朋友幫忙解答一下,多謝!!