编译时提示找不到clang/AST/TypeNodes.inc文件如何解决
问题根因
clang/AST/TypeNodes.inc 不属于LLVM仓库中直接存放的静态源码文件,是Clang构建流程中通过TableGen工具根据.td规则定义文件自动生成的文件,直接从源码目录手动拷贝静态头文件补全本地环境,必然会缺失这类生成态文件。
解决方案
- 普通使用场景(用Clang编译自己的业务/项目代码):
你当前本地Clang安装已经损坏,零散手动补头文件的方式不可靠,除了这类生成文件外,还很容易出现版本不匹配、权限错误、依赖缺失等连锁问题。直接完全卸载当前损坏的Clang/LLVM组件,通过对应操作系统的包管理器重新安装完整版本即可,安装时注意要单独安装Clang的开发头文件包(比如Debian/Ubuntu系需要安装对应版本的libclang-dev包,最小化默认安装不会携带开发头文件)。 - Clang源码编译场景:
不要单独拷贝clang/include目录下的文件,拉取对应版本的完整LLVM项目源码后,按照标准构建流程执行配置、编译步骤即可,构建系统会自动调用TableGen解析clang/include/clang/AST/TypeNodes.td规则文件,生成对应版本的TypeNodes.inc到构建目录的对应路径,编译阶段会自动将该路径加入头文件搜索路径,不需要手动干预。 - 临时应急获取文件:
如果暂时不方便重装或全量编译,可以下载和你本地Clang版本号完全一致的官方预编译压缩包,解压后在lib/clang/<对应版本号>/include路径下就能找到编译好的TypeNodes.inc文件。注意必须保证版本号完全一致,不同Clang版本的AST节点定义存在差异,跨版本拷贝会触发大量隐蔽的编译错误、链接错误甚至运行时崩溃。
提示:Clang的AST相关头文件、自动生成的.inc文件和版本强绑定,不要跨大版本拼凑头文件,否则排查问题的成本远高于重装完整版本的成本。
内容的提问来源于stack exchange,提问作者Isaac Jacobson
相关产品推荐
相关产品推荐

