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上執行,記錄下編譯過程
準備工作
- yum install
sudo yum install gcc gcc-c++ make automake autoconf libtool
sudo yum install python python-devel - 下載cmake
- 下載ninja
- 下載llvm3.7.0原始碼(lld可以編譯過,lldb暫時沒有編過,其他openmp和polly不知道幹啥的沒有下載)
構建gcc4.9.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
- 解壓
- 編譯
- 安裝
修改軟連線
./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
- 解壓
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 - 使用附件中的patch/llvm_1目錄對llvm目錄進行替換
- 在llvm所在目錄建立build目錄
mkdir llvm_built_by_gcc
cd llvm_built_by_gcc - 編譯安裝(注意更改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 - 加入crtBegin/crtEnd檔案(將附件中crt資料夾中的*.o檔案拷貝到)~/clang/3.7.0/gcc/lib/clang/3.7.0/
- 安裝到/usr/local
sudo cp -r ~/clang/3.7.0/gcc/* /usr/local
構建libunwind/libc++/libc++abi
build libunwind
tar xf libunwind-3.7.0.src.tar.xz
mv libunwind-3.7.0.src libunwind
cd libunwind
mkdir build
cd buildcmake -G Ninja -DCMAKE_C_COMPILER=clang ..
ninjacp -r ../include/* ~/clang/3.7.0/usr/include/
cp -lib/* ~/clang/3.7.0/usr/lib64build 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/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/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
- 使用附件中的patch/llvm_2目錄對llvm目錄進行替換
- 在llvm所在目錄建立build目錄
mkdir llvm_built_by_clang
cd llvm_built_by_clang - 編譯安裝(注意更改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 - 加入crtBegin/crtEnd檔案(將附件中crt資料夾中的*.o檔案拷貝到)~/clang/3.7.0/gcc/lib/clang/3.7.0/
- 安裝到/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.