溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

llvm 編譯說(shuō)明

發(fā)布時(shí)間:2020-07-09 02:26:33 來(lái)源:網(wǎng)絡(luò) 閱讀:2699 作者:sunzeduo 欄目:開(kāi)發(fā)技術(shù)

llvm是一個(gè)新開(kāi)源的編譯器,筆者因?yàn)楣ぷ麝P(guān)系,嘗試使用了一下llvm,現(xiàn)在將llvm編譯說(shuō)明總結(jié)如下:


官方的llvm的說(shuō)明如下網(wǎng)頁(yè),主要使用的指令是


https://github.com/obfuscator-llvm/obfuscator/wiki/Installation


$ git clone -b llvm-3.4 https://github.com/obfuscator-llvm/obfuscator.git
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE:String=Release ../obfuscator/
$ make -j5


其中這里需要注意一點(diǎn) cmake的版本要在 2.8以上,而我測(cè)試的機(jī)器是 


Red Hat Enterprise Linux Server release 6.2 (Santiago)

里面自帶的yum 升級(jí)cmake 只能到 2.6 這點(diǎn)和ubuntu apt-get 差異還是很大


放棄了用yum源升級(jí)后,就需要直接編譯cmake源碼的方式來(lái)安裝cmake了



1  編譯cmake


下載地址 

http://www.cmake.org/download/


我下載的是 Previous Release (2.8.12.2) 這個(gè)版本


下載完成后

[root@zck]# cd /usr/local
[root@zck]# tar -zxv -f cmake-2.8.10.2.tar.gz // 解壓壓縮包
[root@zck]# rm -rf cmake-2.8.12.2.tar.gz // 刪除壓縮包
[root@zck]# cd cmake-2.8.12.2
[root@localhost cmake-2.8.12.2]# ./configure
[root@localhost cmake-2.8.12.2]# make
[root@localhost cmake-2.8.12.2]# make install
[root@zck]# mv cmake-2.8.10.2 cmake // 修改文件夾名


這些命令,還好挺順利的,一切良好


然后再通過(guò)

PATH=/usr/local/cmake/bin:$PATH

export PATH

這樣的指令 將cmake給安裝到系統(tǒng)中,終于搞定了cmake



2   編譯 llvm


$ git clone -b llvm-3.4 https://github.com/obfuscator-llvm/obfuscator.git
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE:String=Release ../obfuscator/


這幾條指令執(zhí)行順利,


但是執(zhí)行到最后一條 make -j5的時(shí)候各種出錯(cuò)。


后來(lái)看了一下系統(tǒng)的 gcc,竟然是 4.4.6的版本,后來(lái)嘗試了用 make 不加多核編譯的選項(xiàng)

竟然能夠慢吞吞的進(jìn)行編譯了,但是并不順利,編譯到百分之70多的時(shí)候,還是出錯(cuò)了,

看來(lái)只能升級(jí) gcc了



3 編譯gcc-4.7.2


參考鏈接

http://blog.sina.com.cn/s/blog_a2ef07450101lo1h.html



首先從 https://gcc.gnu.org/install/download.html

官網(wǎng)找到一個(gè)鏡像下載了 gcc的tar包,上傳到服務(wù)器上,解壓縮后,首先運(yùn)行


./contrib/download_prerequisites

下載依賴的庫(kù)文件


中間出現(xiàn)了一個(gè) 

wget: unable to resolve host address的錯(cuò)誤

解決辦法:


登入root(VPS)。

進(jìn)入/etc/resolv.conf。

修改內(nèi)容為下

nameserver 8.8.8.8 #google域名服務(wù)器

nameserver 8.8.4.4 #google域名服務(wù)器


根據(jù)gcc編譯說(shuō)明,需要在gcc源文件的目錄下建好一個(gè)目錄用于編譯gcc代碼


建好目錄后,進(jìn)入目錄運(yùn)行 configure文件


配置選項(xiàng)為

../configure --prefix=/usr/local/gcc-4.7.2  --enable-languages=c,c++

表示只選擇 c和c++兩種語(yǔ)言

同時(shí)指定 make install 的路徑是 /usr/local/gcc-4.7.2 這個(gè)路徑


    make -j4 開(kāi)始編譯

    一會(huì)兒就出現(xiàn)了

    Error “gnu/stubs-32.h: No such file or directory” while compiling Nachos source code

    

    yum install glibc-devel.i686  修改之

    

    繼續(xù)編譯


經(jīng)過(guò)漫長(zhǎng)的時(shí)間編譯完成以后,gcc終于編譯完成了,然后使用

sudo make install 命令

在/usr/local/gcc-4.7.2 下面將gcc安裝成功。


4 再次編譯 llvm

首先需要重新cmake一下,這次cmake需要指定編譯器,要指定剛剛安裝的gcc-4.7 這個(gè)編譯器


cmake -DCMAKE_BUILD_TYPE:String=Release -DCMAKE_C_COMPILER=/usr/local/gcc-4.7.2/bin/gcc  -DCMAKE_CXX_COMPILER=/usr/local/gcc-4.7.2/bin/g++ ../obfuscator/

用上面的那個(gè)命令,將obfuscate


cmake的相關(guān)選項(xiàng)


CMAKE_C_COMPILER:指定C編譯器

CMAKE_CXX_COMPILER:

CMAKE_C_FLAGS:編譯C文件時(shí)的選項(xiàng),如-g;也可以通過(guò)add_definitions添加編譯選項(xiàng)

EXECUTABLE_OUTPUT_PATH:可執(zhí)行文件的存放路徑

LIBRARY_OUTPUT_PATH:庫(kù)文件路徑

CMAKE_BUILD_TYPE::build 類型(Debug, Release, ...),CMAKE_BUILD_TYPE=Debug

BUILD_SHARED_LIBS:Switch between shared and static libraries


example

set(CMAKE_C_COMPILER "/usr/bin/gcc-4.7")



5  運(yùn)行 clang-3.4

運(yùn)行clang-3.4 發(fā)現(xiàn)依然出現(xiàn)了錯(cuò)誤,說(shuō)是缺少一個(gè)g++的lib庫(kù),


/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found


這個(gè)時(shí)候我們已經(jīng)有了

編譯好的gcc-4.7,只需要設(shè)置一下環(huán)境變量 LD_LIBRARY_PATH 即可,設(shè)置完成以后,再次

運(yùn)行 clang ,運(yùn)行正常


環(huán)境變量設(shè)置 LD_LIBRARY_PATH


LD_LIBRARY_PATH=/usr/local/gcc-4.7.2/lib64/

export LD_LIBRARY_PATH

echo $LD_LIBRARY_PATH

LD_LIBRARY_PATH=

export LD_LIBRARY_PATH


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI