2013-04-13 14 views
5

llvm::WriteBitcodeToFileでビットコードファイルとしてダンプしたllvmモジュールがあります。このビットコードファイルを、モジュール内の関数を含む動的にロード可能なネイティブライブラリに変換する必要があります。LLVMビットコードから位置独立オブジェクトファイルを作成

どうすればよいですか?私はこのためllcを使用してみましたが、これは明らかに再配置可能でないコードを生成し、次の手順で行った後になったのは:その後、

llc -enable-pie -cppgen=functions -filetype=asm executableModule -o em.s 

を、オブジェクトファイルにGNU asとassemblying:

最後に
as -o mylib.o em.s 

、との共有ライブラリを作成しようとしている:

gcc -shared -o libmyfile.so -fPIC mylib.o 

すると、エラーで失敗します。

/usr/bin/ld: error: mylib.o: requires dynamic R_X86_64_PC32 reloc against 'X.foo' which may overflow at runtime; recompile with -fPIC 
collect2: ld returned 1 exit status 

答えて

8

再配置モデルを設定する必要があります。 -llc -relocation-model = picのようなものです。 PIEは実行ファイル用であり、ライブラリ用ではないため、PIEを使用しないでください。また、-cppgenはここでは意味を持ちません。これはcppバックエンド専用です。

+0

ありがとう!!!!、アセンブラに頼ることなくIRビットコードから直接ライブラリを構築するツールはありますか? – lurscher

+0

私はllcがネイティブコード出力をサポートしているのを見ましたが、それは実験的です。そのための生産品質のアプローチはありますか? – lurscher

+0

こんにちは。オプション "-relocation-model"がどこに記述されているのか教えてください。私は "lli"のためにそれを見つけることができますが、 "lli"は "llc"ではありません。 – beroal

関連する問題