概要: LLVM3.2リリースllvm-ld
から削除されました。ビルドシステムの代わりにclangを使用する方法を理解しようとしています。
私はそれを書いている間に自分の質問に対する答えを見つけましたが、それが他の誰かに役立つ場合に備えて、私はまだそれを投稿していることに注意してください。別の答えも歓迎します。
詳細:
最初にを使用してビットコードを生成するビルドプロセスがありclang++ -emit-llvm
ます。次に、ビットコードファイルを取得し、それらを。でリンクしますllvm-link
。次に、を使用していくつかの標準最適化パスを適用しますopt
。次に、。を使用して別のカスタムコンパイラパスを適用しますopt
。opt
次に、3回目の使用で標準の最適化パスを再度適用します。最後に、の最後の実行から出力を取得し、適切なライブラリとリンクして実行可能ファイルを生成するためにopt
使用します。このプロセスでllvm-link
に置き換えようとすると、次のエラーメッセージが表示されます。llvm-link
clang++
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
。