2012-12-13 26 views
1

我想使用clanghttpd編譯爲LLVM字節碼。首先,我嘗試使用GCC,爲此,我做了以下編譯它:使用clang將Apache httpd編譯爲LLVM字節碼

 
./configure --prefix=/home/varun/apache/httpd/gcc --with-included-apr 
make 
sudo make install 

併成功安裝!現在

,我嘗試用鏗鏘編譯它,因爲我做到以下幾點:

 
CC="clang" CFLAGS="-O4" ./configure --prefix=/home/varun/apache/httpd/clang --with-included-apr 
make # didn't come to this step 
sudo make install # didn't come to this step 
 

而且,本身出現故障的配置。我選擇-O4,因爲我讀LLVM輸出字節碼如果您使用-O4或-emit-llvm作爲CFLAGS(他們都不工作)。

這是錯誤我得到:

checking whether the C compiler works... no 
configure: error: in `/home/varun/apache/httpd/httpd-2.4.3/srclib/apr': 
configure: error: C compiler cannot create executables 

這是關係到鏈接器不能夠LLVM的字節碼文件鏈接?

+0

謝謝@雷牟,編輯問題。我應該適當地構思這個問題。 – varuaa

回答

1

LLVM字節碼是在LLVM中使用的中間表示。它不能被任何機器執行。這就是爲什麼配置腳本抱怨

C compiler cannot create executables. 

不要輸出LLVM字節碼。嘗試使用其他優化級別。 (並且在CFLAGS中也不要使用-emit-llvm)。

+0

我想做一些分析,所以想要字節碼。 – varuaa

+0

@varuaa試試這個。執行configure時指定CC =「clang」,然後鍵入CFLAGS =「 - O4」make。在鏈接階段可能會出現鏈接錯誤,因爲GNU鏈接器ld不知道LLVM字節碼的任何內容,因此在執行配置腳本時嘗試指定LD =「llvm-ld」。 –

3

[我知道這是有關連接步驟,但無法使事情工作。最後編譯成功,所以我在寫我自己的答案]

方法1(失敗)使用新立得軟件包管理器我的系統上

  1. 安裝鐺。
  2. 已安裝binutils-gold,因爲需要將LLVMgold.so作爲插件提供給鏈接器。但是對於這個安裝的鐺聲,應該有黃金插件。

試圖與此命令配置的httpd:

 
CC="clang" CFLAGS="-O4" ./configure --prefix=/home/varun/work/httpd/build --with-included-apr 

這裏,--with-包括-APR通過httpd的需要。 -O4是必需的,以便編譯通過字節碼進行。

此配置步驟本身失敗,因爲安裝了鐺沒有合適的插件允許鏈接鏈接對象的字節碼文件。

方法2(成功)

  1. 安裝的binutils金。也獲得了binutils的來源。
  2. 編譯LLVM並使用binutils源代碼進行編譯,以便LLVM擁有黃金插件。

編譯LLVM,

 
../configure --with-binutils-include=/usr/src/binutils/binutils-2.22/include --enable-gold --prefix=/usr/local 
make 
sudo make install 

ln -s /usr/local/lib/LLVMgold.so /usr/lib/bdf-plugins/LLVMgold.so 

現在,編譯的httpd

 
CC="clang" CFLAGS="-O4" ./configure --prefix=/home/varun/work/httpd/build --with-included-apr 
make 
sudo make install 
相關問題