编写一个将 LLVM IR 文件作为命令行参数的程序
Writing a program taking LLVM IR file as a Command line argument
我正在编写一个用于测试 LLVM IR 命令行参数的主.cpp文件。
我正在使用llvm版本:6.0.1
#include<iostream>
#include <llvm/Bitcode/BitcodeReader.h>
#include <llvm/Bitcode/BitcodeWriter.h>
#include "llvm/IR/Function.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/ErrorOr.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/raw_ostream.h"
#include <llvm/Support/Error.h>
#include <llvm/IRReader/IRReader.h>
using namespace llvm;
using namespace std;
static cl::opt<string> input(cl::Positional, cl::desc("Bitcode file"), cl::Required);
int main(int argc, char** argv)
{
cl::ParseCommandLineOptions(argc, argv, "LLVM IR to Bytecode n");
LLVMContext context;
ErrorOr<std::unique_ptr<MemoryBuffer>> mb = MemoryBuffer::getFile(input);
if (error_code ec = mb.getError()) {
errs() << ec.message();
return -1;
}
ErrorOr<std::unique_ptr<Module>> m=parseBitcodeFile(mb->get()->getMemBufferRef(), context);
if (error_code ec = m.getError())
{
errs() << "Error reading bitcode: " << ec.message() << "n";
return -1;
}
return 0;
}
我收到此错误:
错误:"类 llvm::预期>"没有名为"getError"的成员 if (error_code ec = m.getError(((
我谷歌了很多次,但我在任何地方都没有找到答案。请给我一些解决方案。
上述错误是由于一段时间内LLVM API的变化造成的。更改模块读取器函数以返回llvm::Expected <T>
[]https://reviews.llvm.org/D26562 .此类与 ErrorOr 类似,但将 error_code 替换为Error
。由于无法复制错误,因此此类将 getError(( 替换为takeError().
所以上面的代码更改为:
Expected<std::unique_ptr<Module>> m = parseBitcodeFile(mb->get()->getMemBufferRef(), context);
if (std::error_code ec = errorToErrorCode(m.takeError())) {
errs() << "Error reading bitcode: " << ec.message() << "n";
return -1;
}
相关文章:
- 通过命令行在Visual Studio中编译单个独立文件
- 是否可以在命令行中将输入参数传递给可执行文件
- 如何从命令行使用 cmake 为有根的安卓设备制作可执行文件?
- 使用 MinGW 在 Windows 上的命令行编译C++文件
- 程序运行,但文件无法打开.C++中的命令行
- 选择特定版本的 Visual Studio 命令行工具包,并根据特定版本的C++运行时环境编译文件
- 编写一个将 LLVM IR 文件作为命令行参数的程序
- 通过命令行参数获取llvm ir文件时面临问题
- 如果在命令行c++中给出了一个文件,那么如何读取该文件
- 如何在 Boost Program_Options 中使用命令行和分层配置文件的选项
- 如何在不使用文件扩展名的情况下使用命令行参数打开C++中的文本文件?
- 如何处理错误"E1696命令行错误:无法在Visual Studio 2017中打开元数据文件"mscorlib.dll"?
- 如何在窗口上的命令行中读取输入 .in 文件
- C++使用命令行输入 txt 文件,但打开文件失败
- Intel-Pin:如何将命令行论证传递给二进制文件
- boost::P rogram_options 一种判断值是从命令行还是 ini 文件的方法?
- 使用命令行参数从TXT文件中提取并在C 中运行特定类
- 试图从命令行打开文件
- 使用提升程序选项通过配置文件/命令行解析自定义对象
- MSI 文件命令行参数解析