10

概要: LLVM3.2リリースllvm-ldから削除されました。ビルドシステムの代わりにclangを使用する方法を理解しようとしています。

私はそれを書いている間に自分の質問に対する答えを見つけましたが、それが他の誰かに役立つ場合に備えて、私はまだそれを投稿していることに注意してください。別の答えも歓迎します。

詳細

最初にを使用してビットコードを生成するビルドプロセスがありclang++ -emit-llvmます。次に、ビットコードファイルを取得し、それらを。でリンクしますllvm-link。次に、を使用していくつかの標準最適化パスを適用しますopt。次に、。を使用して別のカスタムコンパイラパスを適用しますoptopt次に、3回目の使用で標準の最適化パスを再度適用します。最後に、の最後の実行から出力を取得し、適切なライブラリとリンクして実行可能ファイルを生成するためにopt使用します。このプロセスでllvm-linkに置き換えようとすると、次のエラーメッセージが表示されます。llvm-linkclang++file not recognized: File format not recognized

この質問をより具体的にするために、私がやろうとしていることの簡単な例を作成しました。まず、コンパイルしてリンクしたい2つのファイルがあります

test1.cpp:

#include <stdio.h>

int getNum();

int main()
{
  int value = getNum();
  printf("value is %d\n", value);
  return 0;
}

test2.cpp

int getNum()
{
  return 5;
}

次の一連のコマンドを実行しました。

clang++ -emit-llvm -c test1.cpp test2.cpp
llvm-link -o test.bc1 test1.o test2.o 
opt test.bc1 -o test.bc2 -std-compile-opts

(現在llvm 3.1を実行していますが、llvm 3.2で機能する手順を理解しようとしています。llvm-ldの代わりにclangを使用して、LLVM 3.1バージョンを正しく機能させることができるはずです)

次に、実行した場合:

llvm-ld test.bc2 -o a.out -native

すべてが正常で、5をa.out出力します。

ただし、実行した場合:

clang++ test.bc2 -o a.out

次に、エラーメッセージが表示されます。

test.bc2: file not recognized: File format not recognized clang-3:
error: linker command failed with exit code 1 (use -v to see invocation)

明らかに、.cppファイルで直接clangを実行することで、実行可能ファイルを作成できることを知っています。しかし、私は統合するための最良の方法は何であるか疑問に思っていclangますopt

4

2 に答える 2

4

質問で説明されているテストケースは、次の手順を使用してコンパイルできます。

clang++ -emit-llvm -c test1.cpp test2.cpp
llvm-link -o test.bc1 test1.o test2.o 
opt test.bc1 -o test.bc2 -std-compile-opts

llc -filetype=obj test.bc2 -o test.o
clang++ test.o

これにより、作業a.outファイルが作成されます。

llcビットコードからマシンコードに変換する必要があるようです。マシンコードclangは通常どおりに処理できます。

于 2013-01-30T02:52:20.443 に答える