1

clangを使用してhttpdを LLVM バイトコードにコンパイルしたいと考えています。まず、 gccを使用してコンパイルしてみました。そのために、次のことを行いました。

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

そして無事インストール!

今、私はそれをclangでコンパイルしてみます。そのために、次のことを行います:

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 または -emit-llvm を CFLAGS として使用すると LLVM がバイトコードを出力することを読んだので、 -O4を選択しました (どちらも機能しません)。

これは私が得るエラーです:

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 バイトコード ファイルをリンクできないことに関連していますか?

4

3 に答える 3

3

[リンクステップに関連するものであることはわかっていましたが、機能させることができませんでした。ようやくコンパイルが成功したので、私は自分の答えを書いています]

アプローチ 1 (失敗)

  1. Synaptic Package Manager を使用してシステムに clang をインストールしました。
  2. binutils-gold をインストールしました。これは、LLVMgold.so をプラグインとしてリンカーに提供するために必要なためです。しかし、このためには、インストールされたclangにgoldプラグインが必要です。

次のコマンドで httpd を設定しようとしています:

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

ここで --with-included-apr は httpd に必要です。-O4 は、コンパイルがバイトコードを介して行われるようにするために必要です。

インストールされているclangには、リンカーがバイトコードオブジェクトファイルをリンクできるようにするための適切なプラグインがないため、この構成手順自体は失敗します。

アプローチ 2 (成功)

  1. binutils-gold をインストールしました。また、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
于 2012-12-13T06:16:18.013 に答える
1

ここで非常によく似た質問に答えました:

httpd の LLVM IR を生成する

実際、よく書かれたプロジェクトのほとんどで IR を構築するのは簡単です。

私たちのツールの恥知らずなプラグイン:

https://github.com/SRI-CSL/whole-program-llvm

幸運を。

于 2016-07-26T23:27:30.607 に答える
1

LLVM バイトコードは、LLVM 内で使用される中間表現です。どのマシンでも実行できません。そのため、configure スクリプトは次のように不平を言っています。

C compiler cannot create executables.

LLVM バイトコードを出力しません。代わりに他の最適化レベルを使用してみてください。-emit-llvm(また、 inも使用しないでくださいCFLAGS)。

于 2012-12-13T03:54:51.330 に答える