まず第一に、私は何かを楽しむためにやっているだけで、制作のためではありません。
LLVM のビットコードは、ある程度、クロスプラットフォームである Java のバイトコードのように機能します。コードがインライン asm または特別なもので構成されていない限り、ほとんどの状況で機能するはずです。clang
LinuxでLLVMビットコードを使用して単純なhello worldプログラムを正常にコンパイルしlli
、Windowsで適切に実行しました。
しかし、boost_thread などのブースト ライブラリをそのように使用するにはどうすればよいでしょうか。と一緒にビットコード ファイルをパックできますがllvm-link
、それでもクロス プラットフォームになります。しかし、いくつかの方法でビットコードを *.a にリンクすると (私はそれを試みたことはありませんが、llvm-ld
削除されてもできるようです)、おそらくクロスプラットフォームではなくなります (そしてネイティブバイナリになります)実行可能ファイル)。したがって、ブースト ライブラリを自分のプログラムにリンクできるように、ブーストを LLVM ビットコードにコンパイルしたいと考えています。
静的にリンクするとビットコードが大きくなると思われる場合は、実行時にそれらを「リンク」することもできます。lli <your bitcode> <boost's bitcode>...
でブーストをコンパイルしました./b2 toolset=clang cxxflags="-emit-llvm -c"
。自分のやり方が正しいかどうかはわかりません。そうでない場合、ブーストをビットコードにコンパイルする方法はありますか?
編集:上記のコマンドは部分的に機能しているようです。生成される *.o ファイルは LLVM ビットコードですが、*.a にアーカイブされます。*.a を解凍llvm-link
し、アーカイブ内のファイルをリンクするために使用するだけで機能する場合があります。
残念ながら、Boost のスレッド ライブラリにはインライン asm があります。そのため、実行できません...