File io 将模块写入.bc位代码文件

File io 将模块写入.bc位代码文件,file-io,llvm,File Io,Llvm,我假设从模块中转储.bc文件是一个简单的操作,但是现在, 第一次我必须从代码开始,为了我的生命,我 找不到流程中缺少的一个步骤: static void WriteModule ( const Module * M, BitstreamWriter & Stream ) 要编写该模块,首先我需要一个双流编写器 BitstreamWriter::BitstreamWriter (SmallVectorImpl< char > &O) BitstreamWrit

我假设从模块中转储.bc文件是一个简单的操作,但是现在, 第一次我必须从代码开始,为了我的生命,我 找不到流程中缺少的一个步骤:

static void WriteModule ( const Module *  M, BitstreamWriter &  Stream )

要编写该模块,首先我需要一个双流编写器

BitstreamWriter::BitstreamWriter (SmallVectorImpl< char > &O)
BitstreamWriter::BitstreamWriter(SmallVectorImpl&O)

对于BitstreamWriter,我需要一个小矢量。但是,接下来呢? 我是否应该将SmallVectorImpl的内容逐字节写入 我自己的文件处理程序?是否有用于此的llvm api?我需要什么吗
其他?

lib/Bitcode/Writer/BitcodeWriter.cpp
中,
WriteModule
函数是静态的,这意味着它不在那里供外部使用(您甚至无法访问它)

但是,同一文件还有另一个功能,名为
WriteBitcodeToFile
,具有以下接口:

/// WriteBitcodeToFile - Write the specified module to the specified output
/// stream.
void llvm::WriteBitcodeToFile(const Module *M, raw_ostream &Out);
我无法想象一个更方便的界面。声明为
/include/llvm/Bitcode/ReaderWriter.h
的头文件。

我使用以下代码:

std::error_code EC;
llvm::raw_fd_ostream OS("module", EC, llvm::sys::fs::F_None);
WriteBitcodeToFile(pBiFModule, OS);
OS.flush();
然后使用llvm dis进行反汇编。

提供了一种简单的方法。直接使用它,或者看看它是如何工作的。