我正在为C的子集编写一个玩具编译器。我正在为AST使用flex、bison和LLVM。为了生成AST,我编写了一个头文件,其中包括节点的定义和继承细节。标题如下:
#include <iostream>
#include <vector>
#include <llvm-6.0/llvm/IR/Value.h>
....
使用以下命令序列编译我的文件后:
bison -d parser.y -o parser.cpp
flex -o tokens.cpp tokens.l
g++ -o parser parser.cpp tokens.cpp main.cpp
然后编译器抛出以下错误:
In file included from node.h:3:0,
from parser.y:2:
/usr/include/llvm-6.0/llvm/IR/Value.h:17:10: fatal error: llvm-c/Types.h: No such file or directory
#include "llvm-c/Types.h"
^~~~~~~~~~~~~~~~
compilation terminated.
In file included from node.h:3:0,
from tokens.l:3:
/usr/include/llvm-6.0/llvm/IR/Value.h:17:10: fatal error: llvm-c/Types.h: No such file or directory
#include "llvm-c/Types.h"
^~~~~~~~~~~~~~~~
compilation terminated.
In file included from node.h:3:0,
from main.cpp:2:
/usr/include/llvm-6.0/llvm/IR/Value.h:17:10: fatal error: llvm-c/Types.h: No such file or directory
#include "llvm-c/Types.h"
^~~~~~~~~~~~~~~~
compilation terminated.
我试着搜索";包括";目录;Types.h";文件在其他地方,而不在";llvm/IR";目录编译期间是否应包括任何路径?感谢您的帮助!
我知道这个问题很老了,但我遇到了同样的问题,找不到答案,所以我必须弄清楚。在此处添加解决方案可能会对其他人有所帮助。
就像你必须添加前缀";llvm-6.0";要包含Value.h,您必须对llvm-c执行同样的操作。不建议编辑系统包含文件,所以我在g++调用中进行了编辑(我使用的是llvm 10,但其他版本应该相同(:
g++ -I/usr/include/llvm-10 -I/usr/include/llvm-c-10 -o parser parser.cpp tokens.cpp main.cpp