1. 程式人生 > >CentOS6.2編譯llvm3.7.0

CentOS6.2編譯llvm3.7.0

一直苦惱於使用gcc4.8.1以上版本編譯出的程式的可移植性問題,上次使用了Obfuscator之後覺得使用clang+llvm或許是個好路子

目標:
構建一條clang+llvm編譯工具鏈,該工具鏈
1. 生成的程式不依賴gcc(libstdc++/libgcc_s等)
2. 工具鏈本身不需要依賴gcc4.8.1以上的支援(執行編譯工具本身)

網上搜了些類似教程(1/2/3/4),都不能照做成功,綜合各方面做了些修正,現在得到了想要的工具鏈,能在公司的CentOS6.2上使用,編譯出的程式可在初裝的裸機CentOS6.2上執行,記錄下編譯過程

準備工作

  1. yum install
    sudo yum install gcc gcc-c++ make automake autoconf libtool
    sudo yum install python python-devel
  2. 下載cmake
  3. 下載ninja
  4. 下載llvm3.7.0原始碼(lld可以編譯過,lldb暫時沒有編過,其他openmp和polly不知道幹啥的沒有下載)

構建gcc4.9.3

  1. 解壓
  2. 編譯
  3. 安裝

    cd gcc-4.9.3
    ./contrib/download_prerequisites
    cd ..
    mkdir gcc-4.9.3-build
    cd gcc-4.9.3-build
    ../gcc-4.9.3/configure –enable-languages=c,c++ –disable-multilib
    make -j4
    sudo make install

更新python2.7.10

  1. 解壓
  2. 編譯
  3. 安裝
  4. 修改軟連線

    ./configure
    make
    sudo make install
    sudo mv /usr/bin/python /usr/bin/python2.6.6
    sudo ln -s /usr/local/bin/python /usr/bin/python

使用gcc4.9.3構建Clang3.7.0

  1. 解壓
    tar xf llvm-3.7.0.src.tar.gz
    mv llvm-3.7.0.src llvm
    cd llvm
    mkdir -p tools/clang
    mkdir -p tools/clang/tools/extra
    mkdir -p projects/compiler-rt
    tar xf cfe-3.7.0.src.tar.xz -C tools/clang –strip-components=1
    tar xf compiler-rt-3.7.0.src.tar.xz -C projects/compiler-rt –strip-components=1
    tar xf lldb-3.7.0.src.tar.xz -C tools/clang/tools/extra –strip-components=1
  2. 使用附件中的patch/llvm_1目錄對llvm目錄進行替換
  3. 在llvm所在目錄建立build目錄
    mkdir llvm_built_by_gcc
    cd llvm_built_by_gcc
  4. 編譯安裝(注意更改PREFIX目錄)
    cmake -G Ninja -DCMAKE_INSTALL_PREFIX=~/clang/3.7.0/gcc -DCMAKE_C_COMPILER=/usr/local/bin/gcc -DCMAKE_CXX_COMPILER=/usr/local/bin/g++ -DLLVM_ENABLE_ZLIB=OFF -DCMAKE_BUILD_TYPE=”Release” -DCMAKE_CXX_FLAGS=”-std=c++11” -DLLVM_TARGETS_TO_BUILD=”X86” -DLLVM_PARALLEL_COMPILE_JOBS=4 -DLLVM_PARALLEL_LINK_JOBS=4 ../llvm
    ninja
    ninja install
  5. 加入crtBegin/crtEnd檔案(將附件中crt資料夾中的*.o檔案拷貝到)~/clang/3.7.0/gcc/lib/clang/3.7.0/
  6. 安裝到/usr/local
    sudo cp -r ~/clang/3.7.0/gcc/* /usr/local

構建libunwind/libc++/libc++abi

  1. build libunwind
    tar xf libunwind-3.7.0.src.tar.xz
    mv libunwind-3.7.0.src libunwind
    cd libunwind
    mkdir build
    cd build

    cmake -G Ninja -DCMAKE_C_COMPILER=clang ..
    ninja

    cp -r ../include/* ~/clang/3.7.0/usr/include/
    cp -lib/* ~/clang/3.7.0/usr/lib64

  2. build libcxx using libsupc++
    1) patch libcxx(使用path/libcxx打補丁)
    2) 建立編譯目錄
    cd libcxx
    mkdir built_supc++
    cd built_supc++
    3) 編譯
    cmake -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_INSTALL_PREFIX=~/clang/3.7.0/usr -DLIBCXX_CXX_ABI=libsupc++ -DLIBCXX_LIBSUPCXX_INCLUDE_PATHS=”/usr/local/include/c++/4.9.3/;/usr/local/include/c++/4.9.3/x86_64-unknown-linux-gnu/” -DCMAKE_BUILD_TYPE=Release ..
    ninja
    ninja install
    4) 安裝
    mv ~/clang/3.7.0/usr/lib ~/clang/3.7.0/usr/lib64
    sudo cp -r ~/clang/3.7.0/usr/* /usr/

  3. build libcxxabi using libcxx
    1) patch libcxxabi(使用path/libcxxabi打補丁)
    2) 編譯
    cd libcxxabi/lib
    ./buildit
    3) 安裝
    ln -s libc++abi.so.1.0 libc++abi.so.1
    ln -s libc++abi.so.1 libc++abi.so
    cp ../include/* ~/clang/3.7.0/usr/include/
    cp libc++* ~/clang/3.7.0/usr/lib64/
    sudo cp -r ~/clang/3.7.0/usr/* /usr/

  4. build libcxx using libcxxabi
    1) patch libcxx(使用path/libcxx打補丁)
    2) 編譯動態庫
    mkdir built_cxxabi_shared
    cd built_cxxabi_shared
    cmake -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_INSTALL_PREFIX=~/clang/3.7.0/usr -DLIBCXX_CXX_ABI=libcxxabi -DLIBCXX_LIBCXXABI_INCLUDE_PATHS=”/usr/include” -DCMAKE_BUILD_TYPE=Release ..
    ninja
    ninja install
    3) 編譯靜態庫
    mkdir built_cxxabi_static
    cd built_cxxabi_static
    cmake -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_INSTALL_PREFIX=~/clang/3.7.0/usr -DLIBCXX_CXX_ABI=libcxxabi -DLIBCXX_LIBSUPCXX_INCLUDE_PATHS=”/usr/include” -DCMAKE_BUILD_TYPE=Release -DLIBCXX_ENABLE_SHARED=OFF ..
    ninja
    ninja install
    4) 安裝
    mv ~/clang/3.7.0/usr/lib ~/clang/3.7.0/usr/lib64
    sudo cp -r ~/clang/3.7.0/usr/* /usr/

到這個時候,llvm_built_by_gcc這隻雞可以使用-stdlib=libc++來下出不依賴gcc的蛋,接下來,用這隻雞下一個llvm_built_by_clang蛋,這樣編譯器本身也就不依賴高版本gcc了

使用Clang3.7.0構建Clang3.7.0

  1. 使用附件中的patch/llvm_2目錄對llvm目錄進行替換
  2. 在llvm所在目錄建立build目錄
    mkdir llvm_built_by_clang
    cd llvm_built_by_clang
  3. 編譯安裝(注意更改PREFIX目錄)
    cmake -G Ninja -DCMAKE_INSTALL_PREFIX=~/clang/3.7.0/clang -DCMAKE_C_COMPILER=/usr/local/bin/clang -DCMAKE_CXX_COMPILER=/usr/local/bin/clang++ -DLLVM_ENABLE_ZLIB=OFF -DCMAKE_BUILD_TYPE=”Release” -DCMAKE_CXX_FLAGS=”-std=c++11 –stdlib=libc++” -DLLVM_TARGETS_TO_BUILD=”X86” -DLLVM_PARALLEL_COMPILE_JOBS=4 -DLLVM_PARALLEL_LINK_JOBS=4 ../llvm
    ninja
    ninja install
  4. 加入crtBegin/crtEnd檔案(將附件中crt資料夾中的*.o檔案拷貝到)~/clang/3.7.0/gcc/lib/clang/3.7.0/
  5. 安裝到/usr/local
    sudo cp -r ~/clang/3.7.0/gcc/* /usr/local

大功告成

二進位制包

相關推薦

CentOS6.2編譯llvm3.7.0

一直苦惱於使用gcc4.8.1以上版本編譯出的程式的可移植性問題,上次使用了Obfuscator之後覺得使用clang+llvm或許是個好路子 目標: 構建一條clang+llvm編譯工具鏈,該工具鏈 1. 生成的程式不依賴gcc(libstdc++/li

centos 7 編譯 python3.7.0

str error module error: ctu err pro init lin 安裝編譯所需庫 yum install -y libffi-devel 編譯安裝 cd /usr/local/src wget https://www.python.org/ftp/p

Solr學習筆記(2)—— solr-7.0.0 安裝與目錄說明

導入 lms services pan conf nvi os x ins admin      一:Solr系統要求     您可以在任何系統中安裝 Solr,但是這些系統中必須有適用的 Java 運行時環境(JRE),具體介紹如下文所述。目前,這包括 Linux,Mac

spark2.1.0編譯 cdh5.7.0版本

一、實現目標 從spark官網下載2.1.0的原始碼,然後編譯對應hadoop版本的spark,從而可以解決很多相容性問題,使程式執行環境更加優越,順暢。 二、環境準備 1.硬體 無論雲主機還是虛擬機器,記憶體一定要4G以上,最好8G+。 2.軟體 (1)java:spark

centos 編譯python3.7.0 報錯ModuleNotFoundError: No module named '_ctypes'

平臺:CentOS7 先安裝以下依賴 yum -y groupinstall "Development tools&qu

CentOS6.7源碼編譯安裝vim8.0

sta runt rem sha run per fix time python3.5 參考網址:1、https://github.com/Valloric/YouCompleteMe/wiki/Building-Vim-from-source 源碼編譯安裝Python-2

centos6.5上sonarqube6.7.5配置sonar-scanner3.2.0

sonarqube已經安裝完成 安裝sonar-scanner 1、下載安裝包https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner       &nbs

win7原始碼編譯hadoop-eclipse-plugin-2.7.0.jar

當你厭煩了本地編碼,打包,部署到遠端伺服器,然後通過hadoop jar xxx.jar wordcount /input /output的方式執行mapreduce程式,那麼可以考慮本地編譯一個合適的hadoop-eclipse-plugin外掛,進行本地執行遠端mapre

win7通過原始碼編譯hadoop-2.7.0

      編譯hadoop原始碼,意義在於當我們使用eclipse進行hadoop開發時,可以直接在本地執行,而無需打包成jar,然後再提交到hadoop伺服器進行執行。當然,這還需要一個可以支援hadoop對應版本的eclipse外掛,即hadoop-eclipse-2.

基於CentOS6.5編譯Spark2.2.0原始碼

一、建立hadoop使用者及目錄 1 建立使用者 [root@hadoop000 ~]# useradd hadoop 2 設定密碼 [root@hadoop000 ~]# passwd hadoop 3 切換使用者 hadoop [root@hadoop000 ~]

【工作經驗】centos7下編譯gcc 7.2.0

1. 升級gcc到7.2 wget 'http://mirrors-usa.go-parts.com/gcc/releases/gcc-7.2.0/gcc-7.2.0.tar.gz' // 下載

Spark 2.2原始碼編譯 & 支援hadoop-2.6.0-cdh5.7.0

JDK & Maven & Scala & Git軟體安裝 & 前置準備 編譯Spark原始碼的前置要求: Maven 3.3.9 or newer Java 8+ Scala Git(後文會通過分析make-d

Spark-2.1.0-hadooop-2.6.0-cdh5.7.0原始碼編譯

       目前 Spark 編譯指令碼已經將Maven 整合進來了,以方便編譯以及部署。這個指令碼將會在它本地 build/ 編譯目錄自動下載和安裝所有編譯過程中所必需的( Maven,Scala 和 Zinc )。可以手動修改dev/make-distribution

Centos6.5 編譯安裝Mysql 5.5.3.7

oca eight file ont libxml kconfig 最大值 fig toc 1、準備依賴包 yum install gcc* c++ * bison autoconfautomakezlib* libxml* ncurses-devellibmcrypt*

Centos 7.0 編譯安裝LAMP(Linxu+apache+mysql+php)之源碼安裝Apache (一)

mysql apache mysql編譯安裝 apache編譯安裝 lamp編譯安裝 Apache 簡介: Apache是世界使用排名第一的Web服務器軟件。它可以運行在幾乎所有廣泛使用的計算機平臺上,由於其跨平臺和安全性被廣泛使用,是最流行的Web服務器端軟件之一。它快速、可靠

Centos 7.0 編譯安裝LAMP(Linxu+apache+mysql+php)之源碼安裝Mysql (二)

php mysql apache mysql 簡介: MySQL是一個關系型數據庫管理系統,關系數據庫將數據保存在不同的表中,這樣就增加了速度並提高了靈活性。目前其屬於 Oracle 旗下產品。MySQL 是最流行的關系型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RD

Centos 7.0 編譯安裝LAMP(Linxu+apache+mysql+php)之源碼安裝php (三)

lamp apache 源碼編譯lamp php mysql centos 7 編譯安裝lamp PHP簡介: PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特

【轉】CentOS 7.0 安裝Redis 3.2.1詳細過程和使用常見問題

nec count ges des useful 內存 warning before outside http://www.linuxidc.com/Linux/2016-09/135071.htm 環境:CentOS 7.0 Redis 3.2.1 Redis的安裝與啟動

1090 3個數和為0 1091 線段的重疊 1182 完美字符串 1283 最小周長 1284 2 3 5 7的倍數

out under 輸出 return include 字符串 都是 size != 1090 3個數和為0 給出一個長度為N的無序數組,數組中的元素為整數,有正有負包括0,並互不相等。從中找出所有和 = 0的3個數的組合。如果沒有這樣的組合,輸出No Solution。

centos6.5編譯調試mysql-5.7.18

console basedir enable resolv store name 操作 enabled edi 下載mysql-community-5.7.18-1.el6.src.rpm # rpm -ivh mysql-community-5.7.18-1.el6.