8

今、clang を使用して .c ファイルを .s ファイルにビルドします。また、llvm API を使用して IR を変更しました。ただし、変更した IR をファイルに保存できません。「LLVMWriteBitcodeToFile」を使用したいのですが、「LLVMOpaqueModule」の構造体が見つかりません。「WriteBitcodeToFile」を使用したいのですが、常に「型の不一致」が表示されます。また、IR ファイルを実行可能ファイルにビルドする方法も知りたいです。

次に、モジュールを保存するために使用する 2 つの方法を示します。

1、まず WriteBitcodeToFile を使用する

bool unbuffered = false; 
llvm::raw_ostream ro(unbuffered); 
WriteBitcodeToFile(m, ro); 

2、LLVMWriteBitcodeToFile の 2 回目の使用

const char *Path = "hello2.s"; 
int ans = LLVMWriteBitcodeToFile(m, Path); 

注: m は Module インスタンスのポイントです

4

3 に答える 3

4
  1. IR をファイルに保存するには、次の質問への回答を参照してください:モジュールを .bc ビットコード ファイルに書き込む
  2. IR をオブジェクト ファイルにコンパイルするには、ツールを見て、その機能がllc何をするかに従ってください。main
于 2012-12-18T13:48:57.833 に答える
0

でこれらの機能を確認してくださいllvm-c/TargetMachine.h

/** Emits an asm or object file for the given module to the filename. This
  wraps several c++ only classes (among them a file stream). Returns any
  error in ErrorMessage. Use LLVMDisposeMessage to dispose the message. */
LLVMBool LLVMTargetMachineEmitToFile(LLVMTargetMachineRef T, LLVMModuleRef M,
  char *Filename, LLVMCodeGenFileType codegen, char **ErrorMessage);

/** Compile the LLVM IR stored in \p M and store the result in \p OutMemBuf. */
LLVMBool LLVMTargetMachineEmitToMemoryBuffer(LLVMTargetMachineRef T, LLVMModuleRef M,
  LLVMCodeGenFileType codegen, char** ErrorMessage, LLVMMemoryBufferRef *OutMemBuf);

llvm でマシン コードを生成する方法も参照してください。

于 2015-11-24T22:16:23.410 に答える
0

llvmビットコードをファイルに書き込むために私がしていることは次のとおりです:

std::error_code EC;
llvm::raw_fd_ostream OS("module", EC, llvm::sys::fs::F_None);
WriteBitcodeToFile(pBiFModule, OS);
OS.flush();

そして、LLVM-DISを使用して分解します。

于 2016-07-01T00:24:06.687 に答える